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


144

新しく生成されたファイルを後で追加することにより、メインWebサーバーをリモートサーバーに同期するようにrsyncを設定しようとしています。

私が使用するコマンドは次のとおりです。

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

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


2
ファイルリモートサーバーに同期したい場合、最後に来るべきではありませんか?すなわち rsync /foo/bar remoteuser@remotehost:/foo/bar
-ostrokach

このウェブページに興味があるかもしれません。また、ファイルシステムに注意してください。サーバーのファイルシステムがすべての-aオプション(所有者、グループ、権限など)をサポートしていない場合、それが問題の原因であるはずです。
ppr

2
ローカルファイルがリモート宛先に完全にコピーされず、新しいファイルのみをrsyncしたいという問題を解決する答えはありません。
アクセルブレグンスボ16年

-cオプションを見つけました。変更時間やサイズではなく、チェックサムに基づいて既存のファイルをスキップします。
-haheute

回答:


181

からman rsync

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

--update少し異なることを行います。これがおそらく予期しない結果を得る理由です(参考文献を参照man rsync)。

これにより、rsyncは宛先に存在し、ソースファイルよりも変更された時刻を持つファイルをスキップします。(既存の宛先ファイルの変更時間がソースファイルと同じ場合、サイズが異なる場合は更新されます。)


1
実は、「-update」ではなく「--ignore-existing」でコマンドを試しました。高速で終了しましたが、新しいファイルはリモートホストに置かれません。何か案は?おかげで
スーパーマリオ

13
マニュアルページは(その--ignore-existingとおりです)、適切な場合、レシーバーに存在するファイルを転送しないこと、またはレシーバーに同じ名前のファイル/フォルダーが存在する場合にファイルを転送しないことを意味しますか?
プーク

7
--update 、mtimesが同じ場合にファイルをスキップします(言い回しが意味するものではありません)。これをテストしました。「宛先よりも新しいソースファイルのみがコピーされる」と言った場合、文言はよりよく理解されると思います。
タコ

4
@Octopus "コピー先よりも新しいソースファイルのみがコピーされます" ...またはコピー先ファイルと同じ修正時間を持つが、サイズが異なるソースファイル。それが重要なポイントだと思います。(クリスはすでにそれをカバーしている、ありがとう)
ジョナサンKomar

したがって、-ignore-existingと-r(再帰)が必要です。-v(冗長)もあると便利です:
DutchUncle

40

私の場合、同様の問題があり、変更された/新しいファイルだけではなく、すべてのファイルが転送されました。私はこれを-t(ではなく-a)パラメータを使用して解決し、-P(と同等--partial --progress):

rsync -h -v -r -P -t ソース ターゲット

これは新しいファイルのみを転送し、すでに存在するが変更されたファイルを転送します。-aユーザーとグループIDの同期のように、ソースとターゲットシステムに異なるユーザーとグループがあるため機能しません。

パラメーターの詳細:

  • -h:人間が読める番号
  • -v:詳細
  • -r:ディレクトリへの再帰
  • -P:(--partial部分的に転送されたファイルを保持)+
            --progress(転送中に進行状況を表示)
  • -t:変更時間を保存する

2
「-aが多すぎる」ための+1(実際-rlptgoD、許可はフラット化されず、グループと所有者は保持されます-私の典型的なプレイセーフバックアップではありません...)
フランクノック

2

rsyncの経験から、1TBのパーティションコピーは大きすぎて効率的ではありません。rsyncを処理するには永遠にかかります。代わりに、サブディレクトリごとに実行します。つまり、各メインサブディレクトリに対してrsyncを実行します。数万のファイルをジャグリングする必要がない場合、はるかに高速になります。


1
たぶん、あなたはメモリを使い果たして、あなたのシステムは交換を始めましたか?
マルセル・ブルクハルト

-2

試して

rsync -zvrt --update SOURCE DESTN

8
OPについては、上記のコマンドについてもう少し説明してください。
ペシュケ

manページから `-u、
update
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.