sftp - cara hanya menyalin file dari folder yang tidak ada di folder tujuan

19

Saya bertanya-tanya apakah mungkin getfile dengan sftp, tetapi mencegahnya mengunduh ulang file yang sudah ada di folder tujuan?

anthonybell
sumber

Jawaban:

20

sftpmemiliki kemampuan terbatas. Meskipun demikian, getperintah memiliki opsi yang dapat melakukan trik: get -amenyelesaikan unduhan parsial, jadi jika file sudah ada pada klien dan setidaknya sebesar file di server, itu tidak akan diunduh. Jika file ada tetapi lebih pendek, ujung file akan ditransfer, yang masuk akal jika file lokal adalah produk unduhan yang terputus.

Cara termudah untuk melakukan hal-hal kompleks melalui SFTP adalah dengan menggunakan SSHFS . SSHFS adalah sistem file yang menggunakan SFTP untuk membuat sistem file jarak jauh muncul sebagai elemen file lokal. Pada klien, SSHFS memerlukan FUSE , yang tersedia di sebagian besar unix modern. Di server, SSHFS membutuhkan SFTP; jika server memungkinkan SFTP maka Anda dapat menggunakan SSHFS dengannya.

mkdir server
sshfs server.example.com:/ server
rsync -a server/remote/path /local/path/
fusermount -u server

Perhatikan bahwa rsync melalui SSHFS tidak dapat memanfaatkan algoritma transfer delta, karena rsync tidak dapat menghitung checksum parsial di sisi jarak jauh. Itu tidak relevan untuk unduhan satu kali tetapi sia-sia jika Anda menyinkronkan file yang telah dimodifikasi. Untuk sinkronisasi file yang dimodifikasi secara efisien, gunakan rsync -a server:/remote/path /local/path/, tetapi ini membutuhkan akses shell SSH, bukan hanya akses SFTP. Akses shell dapat dibatasi untuk perintah rsync.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
7

Anda dapat menggunakan -abendera untuk getperintah:

$ sftp example.com
sftp> get -a hello.txt

Anda dapat menentukan *untuk mengunduh seluruh direktori tentunya.

Namun, ada beberapa peringatan.

  • Ini tidak berfungsi pada OS X. Mungkin tidak bekerja pada sistem lain. Saya sudah mengujinya di Ubuntu 15.04.
  • Opsi ini dimaksudkan untuk melanjutkan unduhan yang terputus. Jika file Anda telah berubah, hasilnya akan menjadi unduhan yang rusak.

Opsi yang lebih baik adalah menggunakan rsync:

rsync example.com:hello.txt

Ini akan selalu memberi Anda file seperti di server, hanya mentransfer perbedaan antara salinan lokal dan jarak jauh jika berbeda, dan tersedia secara universal.

Stefano Palazzo
sumber