rsync忽略所有者,组,时间和权限


67

我想知道如何使用rsync递归同步到文件夹,但是我只需要更新新文件或更新的文件(仅内容而不是所有者,组或时间戳),并且我想删除源中不存在的文件。

Answers:


93

我想你可以使用-no-选项rsync复制你的同步中文件的所有权或权限。

rsync手册页摘录

--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可能会做您想要的。


当使用--no-times时,我仍然看到很多文件(带有逐项更改)被标记为使用>f..T...,这表明在目标上设置了文件标志和修改时间,这是我要避免的事情。
迈克尔

17

我认为避免使用-a选项会更容易

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

并仅设置所需的选项。

如果您喜欢所有选项,但不喜欢用户-o,group -g,time -t和权限-p的修改,则可以从等效的归档文件中减去这四个选项。

$ -rlD

要删除目标文件,请使用--delete选项。

给您的问题:但是我认为所有文件都将被检查-rsync无法仅传输/检查仅按内容更改的文件。


-l是用于链接,-D设备(与相同--specials),-r如果我们在谈论内容,我想就足够了。
sdkks

7

我认为您正在寻找的是选项

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


4

您可以强制rsync忽略基于文件mod时间和大小的检查,并通过“ -c”开关使用基于chksum的方法。

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

这确实意味着它需要以块为单位比较整个文件(并在源和目标之间来回传输相关元数据以实现此目的),而不管文件时间和大小是否匹配,而仅传输不同的块在源和目标之间。

将此开关与其他人建议的其他开关结合使用,应该会限制复制的内容(仅复制已更改的内容),并具有在源和目标之间进行一致性检查的优势,但是根据链接速度的不同,它花费的时间会更长。它必须在文件的两面都进行chksum并进行比较)。


我怀疑这就是OP的想法。问题似乎与文件的选择方式无关,但是属性已被复制,并且选择的答案(也被最多人支持)已经涵盖了该问题。
朱莉·

-3

下面的命令可以完美地工作,我根据自己的要求对其进行了测试,只需要更改内容即可。

rsync -acvzh source/ destination/
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.