Rsync:仅复制时间戳

Rsync:仅复制时间戳

目前我有两个目录 A/ 和 B/,除了时间戳外,它们在各方面都相同。因此,如果我运行以下命令:

rsync --dry-run -crvv A/ B/

然后所有文件都标记为“uptodate”,而命令:

rsync --dry-run -rvv A/ B/

表示所有文件都将从 A/ 复制到 B/。

我的问题是:假设我知道这些文件是相同的(就内容而言),那么是否有任何方法(通过 rsync 或其他方式)将 B/ 中文件的时间戳设置为与 A/ 中文件的时间戳相同,而无需将所有文件从 A/ 复制到 B/?

谢谢

答案1

使用-t(保留时间戳)和--size-only将仅比较文件的大小。如果大小匹配,rsync 将不会复制该文件,但由于-t指定了,它将更新目标文件的时间戳而不重新复制它。

确保不要使用-u(更新),因为这将跳过已经存在的文件并完全跳过更新时间戳。

我最初遇到的问题是由于没有使用 rsync 将一堆文件复制到新驱动器,因此时间戳被更新为当前时间。我使用以下命令在相当长的时间内正确同步所有内容:

rsync -vrt --size-only /src /dest

答案2

如果大小匹配,使用 --size-only 将导致 rsync 跳过比较文件时间戳(以及文件内容)。将其与 --times 结合使用将把时间戳克隆到目标树。

答案3

使用来源(例如/path/to/source)目录作为 touch 命令的参考。cd目标目录并执行

find -type f -exec touch -r /path/to/source/{} {} \;

您还不能使用 rsync 复制亚秒级时间戳。

这也适用于目录和伪文件(只需删除或更改-type f

答案4

嗯,你当然可以编写一个脚本,从一侧读取时间戳,然后使用触摸将其设置在另一侧的同一个文件上。

但这可能比简单地让 rsync 尝试复制所有文件花费的时间更长。实际上传输的数据非常少(如果文件确实相同,则仅传输块哈希)。但至少必须在每一侧读取每个文件的完整内容。因此,如果您受到磁盘带宽或 IOPS 的限制,则可能需要一段时间。但可能仍然比编写和测试脚本来执行此操作要少。

相关内容