使用源文件的原始日期更新复制文件的(错误)时间戳

使用源文件的原始日期更新复制文件的(错误)时间戳

我使用 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'")

这里的想法是:

  1. 我们生成相对于源目录的路径列表。
  2. 我们改变到目标目录,并为每个路径构建一个 shell 脚本,将touch -r命令应用于每个路径。

我们使用和-0选项来正确处理包含空格的文件名。findxargs

相关内容