rsync 可以在不重新下载的情况下修复时间戳吗?

rsync 可以在不重新下载的情况下修复时间戳吗?

我已经镜像了 100 GiB 的文件。在我的镜像上,一些时间戳和文件权限可能是错误的。我想使用 rsync 来解决这个问题。

我下载的服务器有超过 100 GiB 的文件。我的镜像镜像某些文件从每个源目录。它不镜像整个目录。

如何告诉 rsync 修复我的时间戳和文件权限,而无需重新下载 100 GiB?

供参考,我现在正在尝试rsync -av --list-only HOST::MODULE >/tmp/list.txt。一旦我获取了这些数据,如果你们都不能告诉我更好的答案,我将编写一个脚本来根据数据触摸我的每个文件。

但是就没有更简洁的方法来完成这项工作吗?

(有这个问题,但它似乎没有回答我的需要。)

答案1

如果您的源和目标位于不同的系统上,并且rsync客户端与服务器(任何类型)通信rsync,则权限和时间戳将在不传输数据内容的情况下更新。例如:

rsync -avP --existing server:/path/to/source /path/to/target
rsync -avP --existing server::module /path/to/target

另一方面,如果您的源和目标由同一个rsync进程管理,例如当服务器的文件系统可通过 NFS 访问时,则没有有效的方法可以确认这两种情况下的数据相同,因此它会放弃它的快捷方式,只需使用更正的权限和时间戳重新复制数据。例如:

rsync -avP --existing /path/to/server/source /path/to/target

如果您遇到第二种情况并且您是绝对确定如果文件内容相同,有一个解决方法将强制rsync假设内容相同 - 即使其“快速检查”失败 - 并且只更新权限和时间戳:

rsync -avP --existing --size-only /path/to/server/source /path/to/target

--existing标志确保不会在目标位置创建新文件,但会适当更新现有文件。该--size-only标志强制rsync忽略时间戳。

相关内容