it-swarm-id.com

Cara menggunakan rsync melalui FTP

Segala penyatuan:

Saya memiliki baris cmd berikut yang berfungsi dengan baik.

rsync -avr -e ssh /home/dir [email protected]:/home/

Tetapi saya perlu mengaturnya sekarang untuk rsync ke server jauh yang hanya memiliki server FTP di atasnya. Bagaimana saya melakukannya?

Saya melihat bantuan rsync tetapi dengan cepat tersesat (saya tidak sering melakukan hal ini).

191
bumperbox

Kamu tidak. rsync tidak bisa melakukan itu untuk Anda, itu adalah protokolnya sendiri dan tidak berfungsi melalui FTP.

Anda mungkin ingin mencoba csync . IIRC menyediakan perilaku seperti rsync melalui HTTP. Saya tidak dapat mengomentari apakah itu berfungsi melalui FTP, Anda harus mencobanya.

80
serverhorror

rsync tidak akan berfungsi untuk Anda karena alasan yang disebutkan orang lain. Namun, lftp dan ncftp keduanya memiliki mode "mirror" yang mungkin akan memenuhi kebutuhan Anda.

Saya menggunakan ini untuk Mendorong barang-barang dari direktori lokal saya ke host Web ftp atau sftp:

lftp -c "set ftp:list-options -a;
open ftp://user:[email protected]; 
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown  
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"
163
easel

Seperti yang ditulis oleh kuda-kuda , lftp adalah alat yang baik.

Saya sarankan Anda untuk parametrize skrip, dan memanfaatkan

exclude-glob

opsi, yang mengecualikan nama file menggunakan fitur glob (* ,? ..) dari Shell Anda:

#!/bin/bash    
Host="your.ftp.Host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:[email protected]$Host"
LCD="/path/of/your/local/dir"
RCD="/path/of/your/remote/dir"
#DELETE="--delete"
lftp -c "set ftp:list-options -a;
open '$FTPURL';
lcd $LCD;
cd $RCD;
mirror --reverse \
       $DELETE \
       --verbose \
       --exclude-glob a-dir-to-exclude/ \
       --exclude-glob a-file-to-exclude \
       --exclude-glob a-file-group-to-exclude* \
       --exclude-glob other-files-to-exclude"

Peringatan: pastikan bahwa direktori target ada, jika tidak perintah cd akan gagal, jadi operasi termasuk menghapus pohon dari file akan terjadi di direktori yang salah (root)!

Saya telah memperbarui skrip sehingga --delete opsi dinonaktifkan oleh defaut, aktifkan dengan membatalkan komentar DELETE= command.

123
GabrieleV

Bergantung pada apa yang sebenarnya Anda coba lakukan, pendekatan lain yang sama sekali berbeda dapat menggunakan curlftps untuk memasang folder ftp, dan kemudian mungkin rsync dua folder "lokal".

Instalasi berbeda tergantung pada distro Anda jadi saya tidak bisa menyamaratakan itu, tetapi Anda perlu menginstal Fuse dan curlftpfs (prolly Debian sudah memiliki Fuse instal secara default), kemudian:

  1. Sudo apt-get install curlftpfs

  2. Pastikan modul Fuse dimuat (modprobe Fuse)

  3. Sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other

Perhatikan bahwa tidak ada ruang setelah koma terakhir (ini bukan kesalahan ketik!). Jika Anda puas dengan itu atau tidak ingin melakukannya setiap saat, Anda dapat menambahkannya ke fstab Anda (biasanya dalam /etc/fstab):

curlftpfs#user:[email protected] /path/to/ftp/folder/ Fuse auto,user,uid=1000,allow_other 0 0

Dalam hal ini, Anda harus memastikan modul Fuse dimuat sebelumnya.

Namun disarankan: dua hal:

  • Bahwa pengembang menghentikan proyek satu atau dua tahun yang lalu, jadi saya tidak tahu bagaimana dapat digunakan/stabil untuk saat ini.
  • Jika kata sandi berisi karakter aneh curlftpfs bisa gagal (mungkin Anda bisa melakukan sesuatu dengan .netrc).

Ada weex ...

Weex adalah utilitas yang dirancang untuk mengotomatiskan tugas menjaga jarak jauh halaman web atau arsip FTP lainnya. Ini akan menyinkronkan satu set file lokal ke server jauh dengan melakukan unggahan dan penghapusan jarak jauh seperti yang diperlukan.

16
Johan

rsync tidak berfungsi lebih dari ftp. Di sisi jarak jauh ia membutuhkan daemon rsync atau Shell yang dapat digunakan untuk memanggil rsync. Ftp umumnya memungkinkan Anda untuk memanggil beberapa perintah dan rsync bukan salah satunya. Ada alat lain yang dimaksudkan untuk mengotomatisasi tugas ftp seperti "lftp".

9
Ian Kelling

Ini sepertinya cocok dan gratis: https://savannah.gnu.org/projects/ftpsync/

8
pauska

Untuk apa yang tampaknya Anda coba lakukan, Anda juga bisa menggunakan wget.

wget -m ftp: // username: [email protected]

7
Aaron

Anda dapat menggunakan curlftpfs untuk me-mount ftp dan menggunakan rsync setelah http://linux.die.net/man/1/curlftpfs

5
shaftmx

Saya menggunakan GVFS/FTP. Saya memasang server FTP jarak jauh saya dengan gigolo. Karena mereka dilihat sebagai direktori lokal, hampir semua yang bekerja pada file lokal berfungsi. rsync dirancang untuk menghitung hash file dari jauh untuk membandingkan file tanpa mentransfernya, tetapi melakukan hal itu dengan file virtual mentransfer file. berbarengan dan freefilesync biasanya berfungsi dengan baik tetapi saya menemukan masalah ketika mereka ingin mengganti nama file yang Anda unggah, tidak ada masalah mengunduh. Ini bisa menjadi masalah dengan gvfs 1.6.1.

4
Papou

Solusi Jonas S dapat berguna tergantung pada keadaan, misalnya jika Anda memiliki kecepatan unduh yang tinggi dan unggahan yang lambat, memeriksa file di server mungkin relatif lebih cepat daripada mengunggah file yang tidak perlu.

Anda mungkin ingin menggunakan CurlFTPFS, meskipun: http://packages.ubuntu.com/search?suite=default&section=all&Arch=any&searchon=names&keywords=curlftpfs

Meskipun, secara umum, lebih baik menggunakan klien FTP biasa sama sekali daripada rsync.

3
user25738

Jika Anda ingin mengotomatiskan tugas kemudian menggunakan lftp karena Anda dapat membuat skrip karena beberapa orang telah memposting di atas, Anda dapat skrip semuanya dengan sangat mudah sesuai dengan keinginan Anda, jika Anda mencari solusi satu kali (yaitu Anda perlu mengunduh seluruh situs web via ftp/pindahkan ke server lain) gunakan ncftp, ini sederhana, instal jika belum diinstal:

apt-get install ncftp

atau

yum install ncftp

(maaf distro berbasis non debian/Red Hat ..)

setelah terinstal, buka ncftp di terminal lalu ketik:

open -u ftpusername ftp.thedomain.com

Ia akan meminta kata sandi Anda, masukkan, dan kemudian:

get -R /home/remotewebsite/public_html/ /home/localwebsite/public_html/

Ini akan melakukan sisanya untuk Anda .. semoga berhasil

2
desdecode

Saya tidak percaya Anda akan dapat melakukan ini, server yang Anda coba Rsync hanya akan memiliki server FTP yang berjalan, tidak akan mengerti perintah yang dikirim Rsync itu.

Jika alasan Anda ingin melakukan ini adalah bahwa Anda hanya memiliki akses ke port 21, tetapi Anda memiliki kontrol terhadap server, Anda dapat mengubah port Rsync mendengarkan, pada server, tetapi ini jelas hanya berguna jika Anda tidak ingin menggunakan FTP pada port itu.

2
Sam Cogan

rclone adalah perangkat lunak yang bagus yang melakukan sinkronisasi direktori melalui ftp dan banyak protokol lainnya termasuk penyedia penyimpanan cloud (Amazon S3, Dropbox, Google Drive). Itu dapat menyinkronkan ke/dari kombinasi penyimpanan lokal atau jarak jauh.

Untuk mengatur ftp remote follow instruksi ini .

Setelah selesai, operasi sinkronisasi adalah:

rclone sync /home/dir FTP_REMOTE:/home --progress 
1
bernie

Menggunakan "sitecopy" atau "mirror" dapat menghemat banyak bandwidth.

Keduanya menangani pembaruan inkremental yang efisien.

1
Kan-Ru Chen

Saya membuat alat baris perintah untuk itu: ftpsync

Mengapa? Karena sederhana dan elegan, alat lain membutuhkan banyak dependensi, terkadang kompilasi, terkadang tidak berfungsi (mis. Lftp di MacOs High Sierra). Ftpsync ditulis dalam Python murni, tidak memerlukan lib pihak ke-3 dan ini kecil, Anda hanya bisa memasukkan file dalam proyek Anda.

Penggunaan: cd ke direktori proyek Anda dan ketik:

ftpsync user:[email protected]/remote/dir --delete

--delete singkatan untuk menghapus file jarak jauh yang tidak ada secara lokal.

Jika Anda tidak ingin melakukan sinkronisasi tetapi jalankan perintah raw ftp gunakan:

ftpsync -c '...'

Ini berguna untuk beberapa operasi sederhana seperti mengirim file dan menamainya kembali:

ftpsync -c 'PASV; TYPE I; STOR some_file.ext; RNFR some_file.ext; RNTO some_file_renamed.ext'
0
superdario128

Ada juga wput:

wput --timestamping --reupload --dont-continue source-files ftp://target.Host/dir

Nama pengguna dan kata sandi dibaca dari ~/.netrc. Kalau tidak, jika Anda tidak terlalu peduli dengan keamanan, Anda dapat menyediakannya sebagai ftp: // username: [email protected] .

0
Ole Wolf