get
Dosyaları ile mümkün olup olmadığını merak ediyorum sftp
, ancak hedef klasörde zaten mevcut olan dosyaları yeniden indirmesini önlüyor musunuz?
get
Dosyaları ile mümkün olup olmadığını merak ediyorum sftp
, ancak hedef klasörde zaten mevcut olan dosyaları yeniden indirmesini önlüyor musunuz?
Yanıtlar:
sftp
sınırlı özelliklere sahiptir. Bununla birlikte, get
komutun hile yapabilen bir seçeneği vardır: get -a
kısmi indirmeleri tamamlar, bu nedenle bir dosya istemcide zaten mevcutsa ve en azından sunucudaki dosya kadar büyükse, indirilmez. Dosya mevcut ancak daha kısasa, dosyanın sonu aktarılacaktır, bu da yerel dosyanın kesintiye uğramış bir indirme işleminin ürünü olması anlamlıdır.
SFTP üzerinden karmaşık şeyler yapmanın en kolay yolu SSHFS kullanmaktır . SSHFS, uzak bir dosya sistemini yerel bir dosya olarak göstermek için SFTP kullanan bir dosya sistemidir. İstemcide, SSHFS çoğu modern birleşimde bulunan SİGORTA gerektirir . Sunucuda SSHFS, SFTP gerektirir; sunucu SFTP'ye izin veriyorsa, SSHFS'yi onunla kullanabilirsiniz.
mkdir server
sshfs server.example.com:/ server
rsync -a server/remote/path /local/path/
fusermount -u server
SSHFS üzerinden rsync'in, uzak taraftaki kısmi sağlama toplamlarını hesaplayamadığından delta aktarım algoritmasından yararlanamayacağını unutmayın. Bu bir defalık indirme için alakasızdır, ancak değiştirilmiş dosyaları senkronize ediyorsanız boşa gider. Değiştirilmiş dosyaların verimli senkronizasyonu için kullanın rsync -a server:/remote/path /local/path/
, ancak bu sadece SFTP erişimi değil, SSH kabuk erişimi gerektirir. Kabuk erişimi rsync komutuyla sınırlandırılabilir.
-a
Bayrağı get
komut için kullanabilirsiniz :
$ sftp example.com
sftp> get -a hello.txt
*
Elbette tüm dizini indirmeyi belirtebilirsiniz .
Ancak, birkaç uyarı var.
Daha iyi bir seçenek rsync
:
rsync example.com:hello.txt
Bu, dosyayı her zaman sunucuda olduğu gibi verir, yalnızca yerel ve uzak kopya arasındaki farkları farklıysa aktarır ve evrensel olarak kullanılabilir.