sftp - Kopiert nur Dateien aus Ordnern, die nicht im Zielordner vorhanden sind

18

Ich frage mich, ob es möglich ist, getDateien mit sftpherunterzuladen, aber zu verhindern, dass Dateien, die bereits im Zielordner vorhanden sind, erneut heruntergeladen werden.

anthonybell
quelle

Antworten:

19

sftphat begrenzte Fähigkeiten. Der getBefehl verfügt jedoch über eine Option, mit der der Trick ausgeführt werden kann: get -aTeil-Downloads werden abgeschlossen. Wenn also eine Datei bereits auf dem Client vorhanden ist und mindestens so groß ist wie die Datei auf dem Server, wird sie nicht heruntergeladen. Wenn die Datei vorhanden, aber kürzer ist, wird das Ende der Datei übertragen. Dies ist sinnvoll, wenn die lokale Datei das Produkt eines unterbrochenen Downloads ist.

Der einfachste Weg, komplexe Dinge über SFTP zu erledigen, ist die Verwendung von SSHFS . SSHFS ist ein Dateisystem, das SFTP verwendet, um ein entferntes Dateisystem als lokales Dateisystem anzuzeigen. Auf dem Client benötigt SSHFS FUSE , das auf den meisten modernen Unices verfügbar ist. Auf dem Server erfordert SSHFS SFTP. Wenn der Server SFTP zulässt, können Sie SSHFS damit verwenden.

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

Beachten Sie, dass rsync über SSHFS den Delta-Übertragungsalgorithmus nicht nutzen kann, da er auf der Remote-Seite keine partiellen Prüfsummen berechnen kann. Das ist für einen einmaligen Download irrelevant, aber verschwenderisch, wenn Sie geänderte Dateien synchronisieren. Verwenden Sie für eine effiziente Synchronisierung geänderter Dateien rsync -a server:/remote/path /local/path/SSH-Shell-Zugriff, nicht nur SFTP-Zugriff. Der Shell-Zugriff kann jedoch auf den Befehl rsync beschränkt werden.

Gilles 'SO - hör auf böse zu sein'
quelle
6

Sie können das -aFlag für den getBefehl verwenden:

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

Sie können *natürlich angeben , dass das gesamte Verzeichnis heruntergeladen werden soll.

Es gibt jedoch einige Einschränkungen.

  • Dies funktioniert unter OS X nicht. Auf anderen Systemen funktioniert es möglicherweise nicht. Ich habe es auf Ubuntu 15.04 getestet.
  • Mit dieser Option können unterbrochene Downloads fortgesetzt werden. Wenn sich Ihre Datei geändert hat, ist das Ergebnis ein beschädigter Download.

Eine bessere Option wäre die Verwendung von rsync:

rsync example.com:hello.txt

Auf diese Weise erhalten Sie die Datei immer so, wie sie sich auf dem Server befindet. Dabei werden nur die Unterschiede zwischen der lokalen und der Remotekopie übertragen, sofern sie sich unterscheiden, und sie ist universell verfügbar.

Stefano Palazzo
quelle