复制文件并保留与原始文件相同的时间戳

复制文件并保留与原始文件相同的时间戳

我需要复制文件,然后更改时间戳属性作为原始文件。我该如何使用终端或其他方式执行此操作?

答案1

cp您可以在复制时通过添加-p或选项来保留原始文件的时间戳--preserve

   -p     same as --preserve=mode,ownership,timestamps

   --preserve[=ATTR_LIST]
          preserve the specified attributes (default: mode,ownership,time‐
          stamps), if  possible  additional  attributes:  context,  links,
          xattr, all

因此只保留时间戳

cp --preserve=timestamps oldfile newfile

或者同时保留模式和所有权

cp --preserve oldfile newfile

或者

cp -p oldfile newfile

还有其他选项可用于递归复制 - 常见的选项是cp -acp --archive),它另外保留符号链接。

答案2

如果要保留原始时间戳,请使用

$ touch -r <original_file> <new_file>

这将从另一个文件复制时间戳。

更多详情请参阅此博客文章:伪造文件访问、修改和更改时间戳

答案3

例如,如果您忘记了 cp -p 参数,并且需要以递归方式用原始时间戳替换时间戳,而无需重新复制所有文件。以下是对我有用的方法:

find /Destination -exec bash -c 'touch -r "${0/Destination/Source}" "$0"' {} \;

假设源文件/文件夹树/Source和目标文件/文件夹树重复:/Destination

  1. find在目标中搜索所有文件和目录(需要时间戳)并-exec ... {}针对每个结果运行一个命令。
  2. bash -c ' ... '使用 bash 执行 shell 命令。
  3. $0保存查找结果。
  4. touch -r {timestamped_file} {file_to_stamp}使用 bash replace 命令${string/search/replace}适当地设置时间戳源。
  5. 引用源目录和目标目录来处理带有空格的目录。

相关内容