SCPは変更されたファイルのみを転送します

SCPは変更されたファイルのみを転送します

私は以下のコマンドを使用してサーバー間でファイルを転送しています

scp -rc blowfish /source/directory/* [email protected]:/destination/directory

updateコマンドと同じように、変更されたファイルのみを転送する方法はありますかcp?

答え1

rsyncあなたの友だちです。

rsync -ru /source/directory/* [email protected]:/destination/directory

ソースに存在しないファイルを宛先で削除する場合は、--deleteオプションを追加します。

答え2

通常、scp を要求するのには理由があります。つまり、ターゲットに rsyncd をインストールできないなどです。

files=`find . -newermt "-3600 secs"`

for file in $files
do
       sshpass -p "" scp "$file" "root@$IP://usr/local/www/current/$file"
done

答え3

別のオプション:

remote_sum=$(ssh ${remote} sha256sum ${dest_filename})
remote_sum=${remote_sum%% *}
local_sum=$(sha256sum ${local_filename})
local_sum=${local_sum%% *}
if [[ ${local_sum} != ${remote_sum} ]]; then
  scp ${local_filename} ${remote}:${remote_filename}
fi

これは 1 つのファイルであれば問題ありませんが、SSH が繰り返し接続できる速度によっては、多数のファイルの場合は少し遅くなります。SSH 接続に controlmasters を設定している場合は、それほど問題にならないかもしれません。ディレクトリ ツリー全体を再帰的にコピーする必要がある場合は、すべてのファイルの合計を計算する単一の SSH コマンドを実行し、その結果を bash 連想配列に押し込み、ローカル ホストで同じ操作を実行してから、ファイルの合計を比較してコピーするかどうかを決定することができます。ただし、リモートに rsync をインストールする方が間違いなく簡単です。

関連情報