Mac OS X下用Bash按创建日期批量重命名照片含空格失效问题
解决Mac OS X下批量重命名照片(支持含空格的文件名)
我完全懂你遇到的问题——shell脚本处理带空格的文件名简直是新手噩梦,尤其是当你还想在新文件名里主动加入空格的时候。你原来的脚本之所以失效,核心原因是没有用双引号包裹变量,导致shell把空格当成了参数分隔符,把一个文件名拆成了好几个部分来处理。
修复后的基础脚本(基于文件修改时间)
只需要给变量加上双引号,同时调整stat的时间格式加入空格就行:
for i in *.jpg; do # 在时间格式里加入空格,并用双引号包裹格式字符串 newname=$(stat -t "%Y-%m-%d %H.%M.%S" -f %Sm -- "$i") # 给所有文件名变量加上双引号,确保空格被正确识别 mv -- "$i" "$newname.jpg" done
关键细节说明:
- 双引号
"$i"和"$newname.jpg":告诉shell把整个字符串当作一个单独的参数,不管里面有没有空格、特殊字符。 --:作用是告诉mv命令,后面的内容都是文件名,避免遇到以-开头的文件名时被当成命令选项处理。stat的格式字符串用双引号包裹:确保%Y-%m-%d %H.%M.%S里的空格被正确解析为格式的一部分,而不是被shell拆分。
更靠谱的进阶方案(基于照片EXIF拍摄时间)
如果你的照片有完整的EXIF数据(大部分数码相机/手机拍摄的照片都有),用exiftool会比stat更准确——因为stat取的是文件修改时间,而EXIF里的拍摄时间才是照片真正的拍摄日期。
首先用Homebrew安装exiftool:
brew install exiftool
然后直接运行重命名命令:
exiftool "-FileName<CreateDate" -d "%Y-%m-%d %H.%M.%S.jpg" *.jpg
这个命令会自动读取每张照片的EXIF拍摄时间,按照你指定的格式(包含空格)重命名,而且完全不用操心空格的问题——exiftool会自动处理所有带空格的原文件名和新文件名。
内容的提问来源于stack exchange,提问作者Andrei
相关产品推荐
相关产品推荐

