get
ファイルをダウンロードするために使用できますが、sftp
既にターゲットフォルダにあるファイルを再ダウンロードするのを防ぐことができるかどうか疑問に思います。
答え1
sftp
限られた能力。それにもかかわらず、このget
コマンドにはこの問題を解決するオプションがあります。get -a
部分ダウンロードを完了します。したがって、ファイルがクライアントにすでに存在し、少なくともサーバー上のファイルと同じ大きさであれば、ダウンロードされません。ファイルが存在するが長さが短い場合、ファイルの終わりが転送されます。これは、ローカルファイルがダウンロードが中断された結果である場合に当てはまります。
SFTPを介して複雑なタスクを実行する最も簡単な方法は、次を使用することです。SSHFS。 SSHFS は、SFTP を使用してリモートファイルシステムをローカルファイルシステムとして表示するファイルシステムです。クライアント側では、SSHFSには次のものが必要です。ヒューズ、ほとんどの最新のuniceで利用可能です。サーバーでは、SSHFSにはSFTPが必要です。サーバーがSFTPを許可している場合は、SSHFSを使用できます。
mkdir server
sshfs server.example.com:/ server
rsync -a server/remote/path /local/path/
fusermount -u server
SSHFS 経由の rsync はリモート側で部分チェックサムを計算できないため、デルタ転送アルゴリズムを利用できません。ワンタイムダウンロードには問題ありませんが、変更されたファイルを同期する場合は無駄です。変更されたファイルを効果的に同期するにはを使用しますrsync -a server:/remote/path /local/path/
。ただし、これにはSFTPアクセスだけでなくSSHシェルアクセスも必要です。ただし、シェルアクセスはrsyncコマンドに制限できます。
答え2
-a
次のget
コマンドでフラグを使用できます。
$ sftp example.com
sftp> get -a hello.txt
もちろん、*
ディレクトリ全体をダウンロードするように指定することもできます。
ただし、いくつかの注意事項があります。
- これはOS Xでは機能しません。他のシステムでは機能しない可能性があります。 Ubuntu 15.04でテストしました。
- このオプションは、中断されたダウンロードを再開するように設計されています。ファイルが変更された場合、ダウンロードは破損します。
より良いオプションは以下を使用することですrsync
。
rsync example.com:hello.txt
これにより、常にサーバーにファイルが提供され、ローカルコピーとリモートコピーの間の違いのみが送信され(他の場合)、普遍的に使用できます。