我使用 Ubuntu 复制了一个相当大的文件夹(有几百万个文件,几 TB,因此同步大约需要今天)。我忘了设置开关,因此复制过程将每个文件的原始时间戳替换为当前时间和日期。
我四处寻找,但到目前为止我找不到任何易于实施的解决方案,当然我可以使用某种文件比较工具来复制整个文件,但这并不能真正解决我的问题。
我想我必须从头开始编写一个脚本,读取每个源文件的时间和日期并将其替换到目标文件中,但我希望有一个更简单的开箱即用的解决方案(例如一些我不知道的复制命令的开关,甚至是支持此功能的第三方工具),或者可能有人已经编写了一个用于类似目的的脚本。
我并不经常使用 Linux,因此请随意提供任何关于如何通过脚本来解决这个问题的提示(如果这是可行的方法),我将非常感激,非常感谢!
答案1
find
我们应该能够使用命令(生成文件列表)和touch
命令(可以-r
选择将目标文件的 mtime 设置为参考文件的值)来拼凑一些东西。
也许是这样的:
(cd /source && find . -type f -print0) |
(cd /destination && xargs -0 -iPATH sh -c "touch -r '/source/PATH' 'PATH'")
这里的想法是:
- 我们生成相对于源目录的路径列表。
- 我们改变到目标目录,并为每个路径构建一个 shell 脚本,将
touch -r
命令应用于每个路径。
我们使用和-0
选项来正确处理包含空格的文件名。find
xargs