Mac终端下使用带变量的touch -t命令循环修改文件创建日期问题
修改文件创建日期:问题排查与解决
问题场景
我有31个命名为01-07-2022.md、02-07-2022.md……31-07-2022.md的Markdown文件,需要将每个文件的创建日期修改为其文件名对应的日期(例如01-07-2022.md对应2022年7月1日)。尝试了以下代码但未达到效果:
for i in {01..31} do touch -t 202207$i0000 $i-07-2022.md done
原代码的问题
touch命令的功能限制:在macOS系统中,touch -t仅能修改文件的修改时间(mtime)和访问时间(atime),完全无法修改文件的创建时间(birth time),这就是代码失效的核心原因。- 补充:你的
touch命令时间格式(YYYYMMDDhhmm)是正确的,但功能不匹配需求。
正确解决方案
在macOS上,可使用SetFile命令(属于Xcode命令行工具组件)修改文件创建时间。修正后的代码如下:
for i in {01..31} do SetFile -d "$i/07/2022 00:00:00" "$i-07-2022.md" done
说明
- 若未安装Xcode命令行工具,可通过执行
xcode-select --install完成安装。 - 修正了原解决方案中的日期格式错误:原代码写为
$i/01/2022,会错误地将日期设为1月,这里改为$i/07/2022以匹配文件名中的7月。
内容的提问来源于stack exchange,提问作者user13735688
相关产品推荐
相关产品推荐

