我需要复制文件,然后更改时间戳属性作为原始文件。我该如何使用终端或其他方式执行此操作?
答案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 -a
(cp --archive
),它另外保留符号链接。
答案2
答案3
例如,如果您忘记了 cp -p 参数,并且需要以递归方式用原始时间戳替换时间戳,而无需重新复制所有文件。以下是对我有用的方法:
find /Destination -exec bash -c 'touch -r "${0/Destination/Source}" "$0"' {} \;
假设源文件/文件夹树/Source
和目标文件/文件夹树重复:/Destination
find
在目标中搜索所有文件和目录(需要时间戳)并-exec ... {}
针对每个结果运行一个命令。bash -c ' ... '
使用 bash 执行 shell 命令。$0
保存查找结果。touch -r {timestamped_file} {file_to_stamp}
使用 bash replace 命令${string/search/replace}
适当地设置时间戳源。- 引用源目录和目标目录来处理带有空格的目录。