如何递归地“触摸”文件?

如何递归地“触摸”文件?

我需要更改大约5000个文件的时间戳。

打字touch file1.txttouch 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

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

相关内容