sftp-宛先フォルダーに存在しないフォルダーからのみファイルをコピーする方法


19

get使用してファイルを作成できるかどうか疑問に思っsftpていますが、宛先フォルダに既に存在するファイルを再ダウンロードできませんか?

回答:


20

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コマンドに制限できます。


7

コマンドに-aフラグを使用できますget

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

*もちろん、ディレクトリ全体をダウンロードするように指定できます。

ただし、いくつかの注意事項があります。

  • これはOS Xでは機能しません。他のシステムでは機能しない可能性があります。Ubuntu 15.04でテストしました。
  • このオプションは、中断したダウンロードを再開することを目的としています。ファイルが変更されている場合、結果は破損したダウンロードになります。

より良いオプションは次のものを使用することrsyncです:

rsync example.com:hello.txt

これにより、常にサーバー上にあるファイルが提供され、ローカルコピーとリモートコピーの違いが異なる場合にのみ転送され、普遍的に利用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.