我需要更改大约5000个文件的时间戳。
打字touch file1.txt
会touch file2.txt
花去我很长时间。
有没有办法可以做一些类似的事情touch -R *
?
答案1
您可以使用find
命令查找所有文件并对touch
找到的每个文件执行-exec
find . -type f -exec touch {} +
如果你只想过滤文本文件的结果,你可以使用
find . -type f -name "*.txt" -exec touch {} +
答案2
g_p 的答案将时间戳设为“现在”,但例如,如果您忘记了 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}
适当地设置时间戳源。- 引用源目录和目标目录来处理带有空格的目录。