如何用Bash或AppleScript将mmddyyyy日期转为mmddyy格式?
解决方法
Bash 实现
1. 直接修改原命令输出6位日期
你可以在原有awk命令里直接处理年份,提取后两位,一步到位得到mmddyy格式:
mdls "$f" | grep kMDItemContentCreationDate | head -n1 | awk '{gsub("[^[:digit:]]+"," "); print $2$3 substr($1,3)}'
- 原理:
substr($1,3)会截取年份($1对应原日期的年部分,比如2024)从第3位开始的子串,也就是后两位24,和前面的月($2)、日($3)拼接后就是mmddyy。 - 注意给
$f加上双引号,避免文件名包含空格时出错。
2. 先获取8位日期再做后续处理
如果不想修改原命令,也可以先把8位日期存到变量,再通过字符串截取得到目标格式:
# 获取8位日期 date8=$(mdls "$f" | grep kMDItemContentCreationDate | head -n1 | awk '{gsub("[^[:digit:]]+"," ");print $2$3$1}') # 截取前4位(mmdd)+ 最后2位(yy)得到6位日期 date6="${date8:0:4}${date8:6}" # 输出结果 echo "$date6"
- 也可以用
sed直接处理8位日期字符串:
echo "$date8" | sed 's/\(....\)..\(..\)/\1\2/'
AppleScript 实现
如果用AppleScript处理,不需要依赖mdls,直接获取文件创建日期并格式化:
-- 替换为你的PDF文件路径,或者从Bash传参时用POSIX file "$f" set targetFile to POSIX file "/Users/xxx/Documents/test.pdf" as alias set creationDate to creation date of targetFile -- 格式化月、日、年为两位数字 set monthStr to text -2 thru -1 of ("0" & (month number of creationDate)) set dayStr to text -2 thru -1 of ("0" & (day of creationDate)) set yearStr to text -2 thru -1 of (year of creationDate as string) -- 拼接成mmddyy格式 set formattedDate to monthStr & dayStr & yearStr
如果要从Bash中调用这个AppleScript,可以写成一行:
osascript -e 'set f to POSIX file "'"$f"'" as alias' -e 'set cd to creation date of f' -e 'set ms to text -2 thru -1 of ("0" & (month number of cd))' -e 'set ds to text -2 thru -1 of ("0" & (day of cd))' -e 'set ys to text -2 thru -1 of (year of cd as string)' -e 'return ms & ds & ys'
内容的提问来源于stack exchange,提问作者TJ Jaglinski
相关产品推荐
相关产品推荐

