回答:
sftp
機能が制限されています。それにもかかわらず、get
コマンドにはトリックを実行するオプションがあります:get -a
部分的なダウンロードを完了するため、ファイルが既にクライアントに存在し、少なくともサーバー上のファイルと同じ大きさである場合、ダウンロードされません。ファイルが存在するが短い場合、ファイルの終わりが転送されます。これは、ローカルファイルがダウンロードの中断によるものである場合に意味があります。
SFTPで複雑なことを行う最も簡単な方法は、SSHFSを使用することです。SSHFSは、SFTPを使用してリモートファイルシステムをローカルファイルシステムとして表示するファイルシステムです。クライアントでは、SSHFSはFUSEを必要とします。これは、ほとんどの最新のユニシスで利用可能です。サーバーでは、SSHFSにSFTPが必要です。サーバーがSFTPを許可している場合、SSHFSを使用できます。
mkdir server
sshfs server.example.com:/ server
rsync -a server/remote/path /local/path/
fusermount -u server
SSHFSを介したrsyncは、リモート側で部分的なチェックサムを計算できないため、デルタ転送アルゴリズムを利用できないことに注意してください。これは、1回限りのダウンロードには無関係ですが、変更されたファイルを同期する場合は無駄です。変更されたファイルを効率的に同期するには、を使用しますrsync -a server:/remote/path /local/path/
が、これにはSFTPアクセスだけでなく、SSHシェルアクセスが必要です。ただし、シェルアクセスはrsyncコマンドに制限できます。
コマンドに-a
フラグを使用できますget
。
$ sftp example.com
sftp> get -a hello.txt
*
もちろん、ディレクトリ全体をダウンロードするように指定できます。
ただし、いくつかの注意事項があります。
より良いオプションは次のものを使用することrsync
です:
rsync example.com:hello.txt
これにより、常にサーバー上にあるファイルが提供され、ローカルコピーとリモートコピーの違いが異なる場合にのみ転送され、普遍的に利用できます。