Saya bertanya-tanya apakah mungkin get
file dengan sftp
, tetapi mencegahnya mengunduh ulang file yang sudah ada di folder tujuan?
sftp
memiliki kemampuan terbatas. Meskipun demikian, get
perintah memiliki opsi yang dapat melakukan trik: get -a
menyelesaikan 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.
Anda dapat menggunakan -a
bendera untuk get
perintah:
$ sftp example.com
sftp> get -a hello.txt
Anda dapat menentukan *
untuk mengunduh seluruh direktori tentunya.
Namun, ada beberapa peringatan.
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.