新しいファイルのみを同期する方法

新しいファイルのみを同期する方法

新しく作成されたファイルをリモートサーバーに追加して、デフォルトのWebサーバーをリモートサーバーに同期させるようにrsyncを設定しようとしています。

これは私が使用するコマンドです:

rsync -avh --update -e "ssh -i /path/to/thishost-rsync-key" remoteuser@remotehost:/foo/bar /foo/bar

ただし、Webサーバーは「--update」フラグにもかかわらず、実際にすべてのファイルを転送したようです。さまざまなフラグの組み合わせを試しましたが(例:「-a」を省略して「-uv」を使用)、何も役に立ちませんでした。新しく追加されたファイルのみを送信するようにrsyncコマンドを変更するにはどうすればよいですか?

答え1

からman rsync

--ignore-existing       skip updating files that exist on receiver

--updateわずかに異なる操作を実行すると、予期しない結果が生じる可能性があります(参考資料を参照man rsync)。

これにより、rsyncはターゲット上のすべてのファイルをスキップします。そして、修正時間はソースファイルよりも最新です。。 (既存のファイルの変更時間が元のファイルと同じ場合、サイズが異なるとファイルが更新されます。)

答え2

ソースサーバーとターゲットサーバーのユーザー/グループIDが異なるため、問題が発生する可能性があります。変更/新しいファイルだけでなく、すべてのファイルを転送するのと同じ状況にあります。解決策は-t(代わりに-a)および-P(と同じ--partial --progress)パラメータを使用することです。

rsync -h -v -r -P -t <source> <target>

または短いです(@ Manngoに感謝します)。

rsync -hvrPt <source> <target>

これは新しいファイルとすでに存在しますが、変更されたファイルのみを転送します。ユーザーやグループIDの同期など、機能するパラメータが多すぎます-a。私の場合、ソースシステムとターゲットシステムには異なるユーザーとグループがあったため、機能しませんでした。したがって、-aすべてのソースファイルとターゲットファイルは常に「異なる」ファイルと見なされます。

仕様:

  • -h:人が読める数字
  • -v:冗談
  • -r: ディレクトリに再帰
  • -P:(--partial部分的に転送されたファイルをアーカイブ)+
            --progress(転送中の進捗状況を表示)
  • -t:修正時間を維持

答え3

説明する問題は、/末尾のソースディレクトリが欠落しているためです。その結果、rsyncすべてのファイルは2回コピーされます。 1つ目はに/foo/bar、2つ目はに/foo/bar/bar更新されます/foo/bar/bar

正しいコマンドは次のようにする必要があります。

rsync -avh -e "ssh -i /path/to/thishost-rsync-key" remoteuser@remotehost:/foo/bar/ /foo/bar

答え4

参考にしてくださいrsync - 既存の無視 -raz --progress /var/www/88021064/var[Eメール保護]:/usr/home/xxx/public_html/var/ は何もしません。、それが私のために働いた方法はrsync --ignore-existing -raz --progress /var/www/88021064**/var/***でした。[Eメール保護]:/usr/home/xxx/public_html/var/、隠しファイルはもう一度実行されるため、隠されたファイルは更新されません。 /var/www/88021064/var/.[^.]*

関連情報