web-dev-qa-db-ja.com

rsyncは所有者、グループ、時間、および権限を無視します

再帰的なフォルダーへの同期にrsyncを使用する方法を知りたいが、新しいファイルまたは更新されたファイル(所有者、グループ、またはタイムスタンプではなくコンテンツのみ)を更新するだけで、ソースに存在しないファイルを削除したい。

75
alsanal

-no-オプションrsync[〜#〜] not [〜#〜]同期しているファイルの所有権または権限をコピーします。

Rsync manページからの抜粋

--no-OPTION
       You may turn off one or more implied options by prefixing the option 
       name with "no-".  Not all options may be pre‐fixed  with  a  "no-":  
       only options that are implied by other options (e.g. --no-D, 
       --no-perms) or have different defaults in various circumstances (e.g. 
       --no-whole-file, --no-blocking-io, --no-dirs).  You may specify 
       either the short or the long option name after the "no-" prefix (e.g. 
       --no-R is the same as --no-relative).

       For example: if you want to use -a (--archive) but don’t want -o 
       (--owner), instead of converting -a into -rlptgD, you could specify 
       -a --no-o (or -a --no-owner).

       The order of the options is important:  if you specify --no-r -a, the 
       -r option would end up being turned on,  the opposite  of  -a  
       --no-r.   Note  also  that the side-effects of the --files-from 
       option are NOT positional, as it affects the default state of several 
       options and slightly changes the meaning of -a (see the  --files-from
       option for more details).

所有権と許可

マニュアルページを見ると、次のようなものを使用したいと思います。

$ rsync -avz --no-perms --no-owner --no-group ...

存在しないファイルを削除するには、--deleteスイッチ:

$ rsync -avz --no-perms --no-owner --no-group --delete ....

タイムスタンプ

タイムスタンプについては、SOURCEファイルとDESTファイルの比較方法を変更せずにこれを維持する方法がありません。このスイッチを使用して、タイムスタンプを無視するようにrsyncに指示することができます。

-I, --ignore-times
       Normally  rsync will skip any files that are already the same size 
       and have the same modification timestamp.  This option turns off this 
       "quick check" behavior, causing all files to be updated.

更新

タイムスタンプの場合、--no-timesはあなたが探していることをするかもしれません。

104
slm

-aオプションを避ける方が簡単だと思います

$ -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

必要なオプションのみを設定します。

ユーザー-o、グループ-g、時間-tおよび権限-pなので、同等のアーカイブからこれらの4つのオプションを差し引くことができます。

$ -rlD

宛先のファイルを削除するには、オプション-deleteを使用してください。

あなたの質問:しかし、私はすべてのファイルがチェックされると思います-rsyncはコンテンツによってのみ変更されたファイルのみを転送/チェックすることはできません。

18
UsersUser

あなたが探しているのはオプションだと思います

rsync -r --size-only

マニュアルページから:

--size-only
   This  modifies  rsync’s  "quick  check"  algorithm  for finding files that need to be transferred,
   changing it from the default of transferring files  with  either  a  changed  size  or  a  changed
   last-modified  time  to  just  looking  for  files that have changed in size.  This is useful when
   starting to use rsync after using another mirroring  system  which  may  not  preserve  timestamps
   exactly.

ソースディレクトリにないファイルを本当に削除したい場合は、--deleteを使用してください。

8
rubo77

Rsyncにファイルのmod時間とサイズに基づくチェックを強制的に無視させ、「-c」スイッチでchksumベースのアプローチを使用できます。

-c, --checksum              skip based on checksum, not mod-time & size

これは、ファイルの時間とサイズが一致するかどうかに関係なく、ファイル全体をチャンクで比較する(およびソースと宛先の間で関連するメタデータを送受信する)必要があるが、異なるチャンクのみを転送することを意味しますソースと宛先の間。

このスイッチを他の人が提案した他のスイッチと組み合わせて使用​​すると、コピーされる内容が制限され(変更されたもののみがコピーされます)、ソースと宛先の間で整合性チェックを実行できるという利点がありますが、リンク速度によっては時間がかかりますファイルのチャンクを両側でchksumして比較する必要があります)。

6
Anthony DFH