我已经镜像了 100 GiB 的文件。在我的镜像上,一些时间戳和文件权限可能是错误的。我想使用 rsync 来解决这个问题。
我下载的服务器有超过 100 GiB 的文件。我的镜像从每个源目录中镜像某些文件。它不反映整个目录。
如何告诉 rsync 修复我的时间戳和文件权限,而无需重新下载 100 GiB?
有关信息,我现在正在尝试rsync -av --list-only HOST::MODULE >/tmp/list.txt
. 一旦我获取了这些数据,如果你们没有人能告诉我更好的答案,我将编写一个脚本来根据数据来处理我的每个文件。
但是没有更简洁的方法来完成这项工作吗?
(有这个问题,但它似乎没有回答我需要的。)
如果您的源和目标位于不同的系统上,并且rsync
客户端与rsync
服务器(任何类型的)通信,则权限和时间戳将在没有数据内容传输的情况下更新。例如:
rsync -avP --existing server:/path/to/source /path/to/target
rsync -avP --existing server::module /path/to/target
Run Code Online (Sandbox Code Playgroud)
另一方面,如果您的源和目标由同一个rsync
进程管理,例如当服务器的文件系统可通过 NFS 访问时,则没有有效的方法可以确认这两种情况下的数据相同,因此它放弃它的快捷方式,只需使用更正的权限和时间戳重新复制数据。例如:
rsync -avP --existing /path/to/server/source /path/to/target
Run Code Online (Sandbox Code Playgroud)
如果您有第二种情况并且您绝对确定文件内容相同,则有一种解决方法将强制rsync
假定内容相同 - 即使其“快速检查”失败 - 并且只需更新权限和时间戳:
rsync -avP --existing --size-only /path/to/server/source /path/to/target
Run Code Online (Sandbox Code Playgroud)
该-existing
标志可确保不会在目标位置创建新文件,但会适当更新现有文件。