Rsync :仅复制时间戳

art*_*lla 53 synchronization rsync copy timestamp

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

rsync --dry-run -crvv A/ B/
Run Code Online (Sandbox Code Playgroud)

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

rsync --dry-run -rvv A/ B/
Run Code Online (Sandbox Code Playgroud)

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

我的问题是:鉴于我知道文件是相同的(就内容而言),那么有没有办法(通过 rsync 或其他方式)将 B/ 中文件的时间戳设置为与中文件的时间戳相同A/,而不将所有文件从 A/ 复制到 B/ ?

谢谢

小智 88

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

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

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

rsync -vrt --size-only /src /dest
Run Code Online (Sandbox Code Playgroud)

  • 我还建议添加 `--existing` 以防止意外复制新文件。 (5认同)
  • 标志`--archive`(或`-a`)包括`-r`、`-t`等:) (2认同)

小智 6

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


rma*_*ter 1

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

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