You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac下SetFile通过变量修改文件创建日期失效问题

问题原因与解决办法

你的脚本出错的核心原因是变量里的单引号被当成了字符串的一部分,而非shell用来包裹参数的分隔符。

你定义date变量时,把日期字符串用单引号包了起来,比如date="'11/15/2022 09:10:26'",此时变量实际存储的内容是带单引号的完整字符串。但执行SetFile -d $date $f时,shell会按空格拆分参数:把'11/15/2022作为-d的第一个参数,09:10:26'作为第二个参数。SetFile收到残缺的日期格式,解析自然出错,最终设置出错误的日期。

而你加echo时,只是把变量内容原封不动输出,看起来像是正确的命令,但实际执行时shell的参数解析逻辑和echo输出完全不同。

修正后的脚本

for f in ./*.jpg ; do 
  t=${f##*/}
  # 去掉变量里的单引号,仅保留日期格式字符串
  date="${t:4:2}/${t:6:2}/${t:0:4} ${t:9:2}:${t:11:2}:${t:13:2}"
  # 用双引号包裹变量,确保日期字符串作为一个整体参数传递给-d选项
  SetFile -d "$date" "$f" 
done

这样修改后,shell会把完整的日期字符串作为单个参数传给-d,SetFile就能正确解析格式,设置出符合预期的创建时间。

内容的提问来源于stack exchange,提问作者Maruf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:50:48