我希望文件夹source
与文件夹destination
同步,其中的所有更改source
都将反映到目的地。
在这种情况下,我将使用 rsync 命令,如下所示:
rsync -av --progress --delete "/source/" "/destination"
使用 / 表示源来指定其内容,不使用 / 表示目的地。
现在,如果源有更新的修改时间,我是否必须使用该-u
选项才能更新目标?或者-av
已经足够了?
我是否需要这个-i
选项?谢谢你!
-u, --update 这会强制 rsync 跳过目标上存在且修改时间比源文件更新的任何文件。 (如果现有目标文件的修改时间等于源文件的修改时间,并且大小不同,则它将被更新。)请注意,这不会影响符号链接或其他特殊文件的复制。此外,发送者和接收者之间的文件格式差异始终被认为对于更新来说足够重要,无论对象上的日期是什么。换句话说,如果源有一个目录,而目标有一个文件,则无论时间戳如何,传输都会发生。此选项是传输规则,而不是排除,因此它不会影响进入文件列表的数据,因此不会影响删除。它只是限制接收者请求传输的文件。
--delete 这告诉 rsync 从接收端删除无关的文件(不在发送端的文件),但仅限于正在同步的目录。您必须要求 rsync 发送整个目录(例如“dir”或“dir/”),而不使用目录内容的通配符(例如“dir/*”),因为通配符由 shell 扩展,因此 rsync 会得到一个请求传输单个文件,而不是文件的父目录。从传输中排除的文件也不会被删除,除非您使用 --delete-excluded 选项或将规则标记为仅在发送端匹配(请参阅过滤规则部分中的包含/排除修饰符)。在 rsync 2.6.7 之前,除非启用 --recursive,否则此选项无效。从 2.6.7 开始,启用 --dirs (-d) 时也会发生删除,但仅限于正在复制其内容的目录。如果使用不当,此选项可能会很危险!首先尝试使用 --dry-run 选项 (-n) 运行来查看要删除哪些文件是一个非常好的主意。如果发送方检测到任何 I/O 错误,则将自动禁止删除目的地的任何文件。这是为了防止发送端的临时文件系统故障(例如 NFS 错误)导致目标上的文件被大量删除。您可以使用 --ignore-errors 选项覆盖它。 --delete 选项可以与 --delete-WHEN 选项之一以及 --delete-excluded 组合使用而不发生冲突。但是,如果未指定 --delete-WHEN 选项,则 rsync 在与 rsync 3.0.0 或更高版本通信时将选择 --delete-during 算法,在与较旧的 rsync 通信时选择 --delete-before 算法。另请参见 --delete-delay 和 --delete-after。
答案1
现在,如果源有更新的修改时间,我是否必须使用该
-u
选项才能更新目标?
不,已经是这样了。所做-u
的是防止如果目的地较新,则会发生变化。如果没有-u
,此类文件将更新为源上的版本(可能较旧)。
我是否需要 -i 选项?
-i
(如--progress
)不会影响同步行为,只会影响显示的输出。它仅显示有关所选每个文件的附加信息。
答案2
你已经得到了一个很好的、被接受的答案;这个答案是对该答案的补充:
如果源有更新的修改时间,我是否必须使用 -u 选项才能
更新目标?或者 -av 已经足够了吗?
选项-u
有点奇怪的恕我直言;奇怪的是它(显然)阻止rsync
更新源文件的修改时间如果它恰好在源上较新。这在某些情况下很有用。
我是否需要 -i 选项?
国际海事组织,-i
(又名 --itemize-changes
) 选项可以是极其对于解决使用中经常出现的问题很有用rsync
。使用此选项的一个问题描述man rsync
如下:
... 11 个字母长的神秘输出。一般格式类似于字符串 YXcstpoguax
... 和神秘的是操作词。然而我发现了下表帮助一点点。我复制并粘贴这张桌子作为一个巨大的# comment
进入调用以下命令的 shell 脚本rsync
:
# decode --itemize-changes output:
#
# YXcstpoguax path/to/file
# |||||||||||
# `----------- "Y" - the type of update being done::
# |||||||||| < : file is being transferred to the remote host (sent).
# |||||||||| > : file is being transferred to the local host (received).
# |||||||||| c: local change/creation for the item, such as:
# |||||||||| - the creation of a directory
# |||||||||| - the changing of a symlink,
# |||||||||| - etc.
# |||||||||| h: the item is a hard link to another item (requires --hard-links).
# |||||||||| .: the item is not being updated (though it might have attributes that are being modified).
# |||||||||| *: means that the rest of the itemized-output area contains a message (e.g. "deleting").
# ||||||||||
# `---------- "X" - the file type:
# ||||||||| f for a file,
# ||||||||| d for a directory,
# ||||||||| L for a symlink,
# ||||||||| D for a device,
# ||||||||| S for a special file (e.g. named sockets and fifos).
# |||||||||
# `--------- c: different checksum (for regular files)
# |||||||| changed value (for symlink, device, and special file)
# `-------- s: Size is different
# `------- t: Modification time is different; T: time set to transfer time
# `------ p: Permission are different
# `----- o: Owner is different
# `---- g: Group is different
# `--- u: reserved for future use
# `-- a: The ACL information changed
# `- x: extended attribute changed
例如,考虑使用该-i
选项生成的以下输出行:
>f..t....... Desktop/pics/SomePicture.jpg
解码为:
>
:文件正在传输到本地主机(已接收)f
: 正在传输文件t
: 修改时间不同