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).
Jawaban:
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.
sumber
rsync tidak akan bekerja 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:
sumber
wput
yang memiliki batas bandwidth built-in.Seperti yang ditulis oleh kuda-kuda ,
lftp
adalah alat yang bagus.Saya sarankan Anda untuk menentukan parameter skrip, dan memanfaatkan
opsi, yang mengecualikan nama file menggunakan fitur glob (* ,? ..) dari shell Anda:
Peringatan: pastikan bahwa direktori target ada, jika tidak perintah cd akan gagal, jadi operasi termasuk menghapus pohon file akan terjadi di direktori yang salah (root)!
Saya telah memperbarui skrip sehingga
--delete
opsi dinonaktifkan oleh defaut, aktifkan dengan menghapus komentarDELETE= command
.sumber
cd $RCD
, sehingga dapat mencegah-script-dengan-a-kesalahan ketik dari sengaja menghapus file dari direktori yang salah:set cmd:fail-exit yes
. (Tampaknyalftp
tidak menyadari bahwa itu telah benar-benar keluar, sampai Anda mengeluarkan perintah selanjutnya.) - Dan sebelumcd $LCD
aku melakukan ini (di shell lokal, yaitu, di bagian atas The Script):set -eu
.mirror
, dan dengan demikian--delete
: d file dari dir yang salah. (Tapi saya menyalinnya kembali, jadi dalam kasus itu tidak masalah. Mungkin itu penting untuk orang lain.)Tergantung dari apa yang sebenarnya Anda coba lakukan, pendekatan lain yang sama sekali berbeda dapat digunakan
curlftps
untuk memasang folder ftp, dan kemudian mungkinrsync
dua folder "lokal".Instalasi berbeda tergantung pada distro Anda jadi saya tidak bisa menyamaratakan itu, tetapi Anda perlu menginstal
fuse
dancurlftpfs
(prolly Debian sudahfuse
menginstal secara default), kemudian:sudo apt-get install curlftpfs
Pastikan
fuse
modul dimuat (modprobe fuse
)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
):Dalam hal ini, Anda harus memastikan modul sekering dimuat sebelumnya.
Namun, maklum dari dua hal:
curlftpfs
bisa gagal (mungkin Anda bisa melakukan sesuatu dengan itu.netrc
).sumber
umount DIR
manaDIR
Anda di/path/to/ftp/folder
atas.Ada beberapa ...
sumber
$ weex yourFTPconfigName
Berikut adalah manual linuxcertif.com/man/1/weexrsync tidak berfungsi lebih dari ftp. Di sisi yang jauh ia membutuhkan daemon rsync atau shell yang dapat dipanggilnya 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".
sumber
Ini sepertinya cocok dan gratis: https://savannah.gnu.org/projects/ftpsync/
sumber
Untuk apa yang tampaknya Anda coba lakukan, Anda juga bisa menggunakan wget.
wget -m ftp: // username: [email protected]
sumber
Anda dapat menggunakan curlftpfs untuk me-mount ftp dan menggunakan rsync setelah http://linux.die.net/man/1/curlftpfs
sumber
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. serentak 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.
sumber
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§ion=all&arch=any&searchon=names&keywords=curlftpfs
Meskipun, secara umum, lebih baik menggunakan klien FTP biasa sama sekali daripada rsync.
sumber
Saya tidak percaya Anda akan dapat melakukan ini, server yang Anda coba untuk Rsync hanya akan memiliki server FTP yang berjalan, tidak akan mengerti perintah yang dikirim oleh Rsync.
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.
sumber
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:
atau
(distro berbasis non debian / red hat ..)
setelah terinstal, buka ncftp di terminal lalu ketik:
Ini akan menanyakan kata sandi Anda, masukkan, dan kemudian:
Ini akan melakukan sisanya untuk Anda .. semoga berhasil
sumber
Menggunakan "sitecopy" atau "mirror" dapat menghemat banyak bandwidth.
Keduanya menangani pembaruan inkremental yang efisien.
sumber
Ada juga wput:
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] .
sumber
Saya membuat alat baris perintah sendiri untuk itu: ftpsync
Mengapa? Karena sederhana dan elegan, alat-alat lain membutuhkan banyak dependensi, kadang-kadang kompilasi, kadang-kadang tidak berfungsi (misalnya lftp pada 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:
--delete
singkatan menghapus file jarak jauh yang tidak ada secara lokal.Jika Anda tidak ingin melakukan sinkronisasi tetapi jalankan perintah raw ftp gunakan:
Ini berguna untuk beberapa operasi sederhana seperti mengirim file dan menamainya kembali:
sumber
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, ikuti instruksi ini .Setelah selesai, operasi sinkronisasi adalah:
sumber
Instal sftp dan kemudian Anda dapat menggunakan rsync.
Saya menggunakan yang berikut ini.
sumber