私は以下のコマンドを使用してサーバー間でファイルを転送しています
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 をインストールする方が間違いなく簡単です。