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
相关产品推荐
相关产品推荐

