「scp」コマンドを使用して新しいファイルのみをコピーする方法は?


24

エラーscpが出たコマンドを使用して、何百というファイルを別のコンピューターにコピーしていstalled ました。次に、ファイルを再度コピーします。既にコピーされたファイルのコピーを回避する方法はありますか?

回答:


40

使用できますrsyncrsyncこのタイプの操作用に設計されています。

構文:

rsync -avh /source/path/ host:/destination/path

または

rsync -a --ignore-existing /local/directory/ host:/remote/directory/

初めて実行すると、すべてのコンテンツがコピーされ、新しいファイルのみがコピーされます。

最初にSCPベースのソリューションを要求したことによって示されたように、SSH接続を介してトラフィックをトンネリングする必要がある場合(たとえば、機密保持の目的で)、-e sshにパラメーターを追加しますrsync。例えば:

rsync -avh -e ssh /source/path/ host:/destination/path

されて--ignore-existing、本当に必要?
メイサム

マニュアルのこの例では:rsync -t *.c foo:src/-> "これは、パターン* .cに一致するすべてのファイルを現在のディレクトリからマシンfooのディレクトリsrcに転送します。いずれかのファイルがリモートシステムに既に存在する場合、rsync remote-更新プロトコルは違いのみを送信することで、ファイルを更新するために使用される "
Meysam

1
通常はを使用しますrsync -avuzh /source/path/ host:/destination/path。これにより、1つのコマンドでジョブ全体が実行され、以降の呼び出しでは、必要なファイルのみが転送されます。
エドワードフォーク

6

何らかの理由でscpを使い続けたい場合は、ローカルデータのw権限を削除し権限がある場合)、scpはそれを変更しません。より正確には:

  1. chmod a-w local/*.tar.gz (ローカルディレクトリ内)
  2. scp remote/*.tar.gz local

これはあまり効率的ではありませんが、scp以外のものに変更せずに高速で一時的な解決策が必要な場合に役立ちます。(称賛:宛先の既存のファイルを置き換えないscp


私はこのソリューションが本当に好きです。リモートセンサーからファイルをアーカイブに収集しています。作業ディレクトリ全体-それぞれにArchiveサブディレクトリがあります。ファイルがアーカイブに入ると、変更されることはありません。アーカイブされたファイルを-wとしてマークするのは本当に簡単なので、これが私がすることです。また、アーカイブディレクトリ以外の作業ファイルはそのままにしておくことができるため、日中に更新プログラムを実行しても、進行中のファイルがコピーされます。これはまさに私が探していたものです。TNXずっと!
–SDsolar

4

SCPでこれを行う方法に関する正確な答えはありませんでした。元の質問がそれを尋ねていたからです。

sudo find /files/ -type f -exec chmod a-w {} \;

scp -r username@server.com:/file/location/* /files

ファイルのコピーが完了したら、アクセス許可を元に戻します。

sudo chmod a+w -R /files


1
おそらく、元の質問は「この問題をどのように解決できますか」であり、rsyncが答えです。
エドワードフォーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.