我正在使用Automator,Bash和Exiftool的组合来获取这样的文件名:0615090217.jpg
并将创建的日期更改为2009:06:15 02:17:00
。
大部分拼图都在工作,我甚至有正则表达式工作,我只是不知道如何使用bash或其他工具的组合来应用它。我一直看到sed建议,但我不知道如何应用它。
以下正则表达式有效here,但我不知道如何在我的设置中应用它:
表达式:/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(.*)\.[^.]+$/g
替换:\n20$3:$1:$2 $4:$5:00\n\t
文字:0615090217.jpg
我的Automator工作流程中的shell脚本如下所示:
for f in "$@"
do
FILENAME=$(basename "$f")
MYDATE='2010:07:09 12:22:00'
/usr/local/bin/exiftool -overwrite_original_in_place -preserve "-AllDates=${MYDATE}" "$f"
done
我想使用我的正则表达式或其他方法将MYDATE替换为从文件名中提取的日期。我觉得我很接近,它只是连接最后的点。
答案 0 :(得分:2)
如果你正在使用OSX,FreeBSD,NetBSD等,那么date
命令可以让你轻松地从一种格式转换为另一种格式:
#!/usr/bin/env bash
for f in "$@"
do
FILENAME=$(basename "$f")
MYDATE=$(date -j -f '%m%d%y%H%M.jpg' "$FILENAME" '+%Y-%m-%d %H:%M:00')
/usr/local/bin/exiftool \
-overwrite_original_in_place \
-preserve "-AllDates=${MYDATE}" \
"$f"
done
你也可以通过使用bash的“参数扩展”来翻译文件名来实现这一点,但这需要更多的输入。
答案 1 :(得分:2)
Exiftool可以自己做到这一点。不需要脚本,因为这会降低整个过程的速度,因为它会为每个文件调用exiftool。
尝试类似:
/usr/local/bin/exiftool -overwrite_original_in_place -preserve '-AllDates<${Filename;s/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(.*)\.[^.]+$/20$3:$1:$2 $4:$5:00/}' DIR
我刚拿起你的正则表达式并把它卡进去,所以先测试一下,当然。我在这里的快速测试工作正常,输出如下。
c:\>exiftool -g1 -alldates X:\!temp\0615090217.jpg
---- IFD0 ----
Modify Date : 2012:08:30 22:25:33
---- ExifIFD ----
Date/Time Original : 2013:18:08 19:04:15
Create Date : 2012:08:30 22:25:33
c:\>exiftool "-AllDates<${Filename;s/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(.*)\.[^.]+$/20$3:$1:$2 $4:$5:00/}" X:\!temp\0615090217.jpg
1 image files updated
c:\>exiftool -g1 -alldates X:\!temp\0615090217.jpg
---- IFD0 ----
Modify Date : 2009:06:15 02:17:00
---- ExifIFD ----
Date/Time Original : 2009:06:15 02:17:00
Create Date : 2009:06:15 02:17:00