我想知道如何使用 rsync 递归同步到文件夹,但我只需要更新新文件或更新的文件(仅内容而不是所有者、组或时间戳),并且我想删除源中不存在的文件。
答案1
我认为你可以使用这些-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 ....
时间戳
至于时间戳,我看不出有什么方法可以在不改变源文件与目标文件比较方式的情况下保留它。您可能想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
可能会做你正在寻找的事情。
答案2
我认为更容易避免-A选项
$ -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
并仅设置您想要的选项。
如果您喜欢所有选项但不喜欢用户的修改-o, 团体-G, 时间-t和权限-p因此您可以从等效的存档中减去这四个选项。
$ -rlD
要删除目标上的文件,请使用选项- 删除。
对于您的问题:但我认为所有文件都会被检查 - rsync 无法仅传输/检查仅按内容更改的文件。
答案3
我认为你正在寻找的是选择
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 -rv --size-only /mnt/from/ /mnt/to/
我的目标是 webdav 安装,这使得进度可见并且初始文件检查速度更快。
这不会在目标中删除,因为我没有为我的用例寻找该选项。