我想rsync
在 Ubuntu 14.04 上仅传输已更改和新的文件。我不想每次都传输所有内容。我并不担心检查文件内容是否真的已更改。存在类似的帖子,但我不确定,因为文档与这些帖子中所说的内容不一致。
文档中rsync
说:
-u, --update
这会强制 rsync 跳过目标文件已存在且日期晚于源文件的任何文件。
http://ss64.com/bash/rsync_options.html
编辑:找到了另一个(可能更官方的)文档页面。它说:
-u, --update
跳过接收器上较新的文件
https://download.samba.org/pub/rsync/rsync.html
我觉得这些措辞很差。首先,第一个说的是“日期”。我认为它实际上是指“时间戳”。其次,更重要的是,它似乎暗示源和目标中具有相同时间戳的文件将被重新传输。文档清楚地说,只有当目标文件的时间戳 ( T_d
) 比源文件时间戳 ( ) 更新(即更晚T_s
)时,它才会跳过文件,这意味着当目标文件早于或等于源文件时,它将进行传输:跳过传输T_d > T_s
意味着它在 时进行传输T_d <= T_s
。
这对我来说是一个重要的问题,因为如果您想以尽可能少的工作(网络/ io / cpu /时间)将所有新的和更改的文件从源文件夹传输到目标文件夹,更新标志可能每次都会重新传输所有内容。
或者也许我遗漏了一些东西,或者误解了一些东西?
(由于主题偏离,该帖子被 stackoverflow.com 拒绝。将其和答案添加到此处,以便将来可能对人们有所帮助。)
答案1
man
在扩展的标志中发现以下内容:
-u, --update
这会强制 rsync 跳过目标上存在的任何文件,且其修改时间比源文件更新。(如果现有目标文件的修改时间等于源文件的修改时间,则如果大小不同则会更新。)
https://download.samba.org/pub/rsync/rsync.html
因此,equal 情况会检查文件的大小,只有文件大小不同时才会传输。我对此很满意。