我希望同步文件夹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。
不,已经是这样了。这样做
-u
是为了防止在目的地较新时发生更改。如果没有-u
,这些文件将更新到源上的版本(可能更旧)。-i
(like--progress
) 不会影响同步行为,只会影响显示的输出。它仅显示有关所选每个文件的附加信息。