新しく生成されたファイルをリモートサーバーに追加して、メインWebサーバーをリモートサーバーに同期するようにrsyncを設定しようとしています。
これが私が使用するコマンドです:
rsync -avh --update -e "ssh -i /path/to/thishost-rsync-key" remoteuser@remotehost:/foo/bar /foo/bar
しかし、「-update」フラグにもかかわらず、Webサーバーは実際にすべてのファイルを転送するようです。私はさまざまなフラグの組み合わせを試しました(たとえば、代わりに「-a」を省略して「-uv」を使用)。新しく追加したファイルのみを送信するようにrsyncコマンドを変更するにはどうすればよいですか?
man rsync
から:
--ignore-existing skip updating files that exist on receiver
--update
は少し異なる動作を行います。これが、予期しない結果が発生する理由です(man rsync
を参照)。
これにより、rsyncは宛先に存在するすべてのファイルを強制的にスキップしますおよびソースファイルよりも新しい変更された時間を持っています。 (既存の宛先ファイルの変更時間がソースファイルと同じ場合、サイズが異なると更新されます。)
私の場合、同様の問題があり、変更された/新しいファイルだけでなく、すべてのファイルが転送されていました。パラメータ-t
(-a
の代わりに)、および-P
(--partial --progress
と同等)を使用してこれを解決しました。
rsync -h -v -r -P -t ソースターゲット
これにより、新しいファイルと、既存の変更されたファイルのみが転送されます:-a
は、ユーザーとグループIDの同期のように多すぎます。私の場合、ソースシステムとターゲットシステムに異なるユーザーとグループがあるため、機能しません。
詳細なパラメータ:
-h
:人間が読める数字-v
:詳細-r
:ディレクトリに再帰します-P
:--partial
(部分的に転送されたファイルを保持)+--progress
(転送中の進行状況を表示)-t
:変更時刻を保持私のrsyncの経験から、1TBのパーティションのコピーは大きすぎて効率的ではありません。それを処理するには、rsyncが永遠にかかります。代わりに、サブディレクトリごとに実行してください。つまり、メインのサブディレクトリごとにrsyncを実行します。何万ものファイルを処理する必要がない場合は、はるかに高速になります。