这个正则表达式使用什么工具

What tool to use for this regex

我正在使用 Automator、Bash 和 Exiftool 的组合来获取这样的文件名:0615090217.jpg 并将创建日期更改为 2009:06:15 02:17:00

拼图的大部分部分都有效,我什至可以使用正则表达式,只是不知道如何使用 bash 或其他工具的某种组合来应用它。我一直看到建议使用 sed,但我不知道如何应用它。

以下正则表达式有效 here,但我不知道如何在我的设置中应用它:

我的 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 替换为从文件名中提取的日期。我觉得我很接近,它只是连接最后的点。

如果您使用 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 的 "Parameter Expansion" 拆分文件名来实现此目的,但这需要更多的输入。

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:: ::00/}' DIR

我刚刚提取了你的正则表达式并将其插入,所以当然要先测试一下。我在这里的快速测试工作正常,输出如下。

c:\>exiftool -g1 -alldates X:\!temp15090217.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:: ::00/}" X:\!temp15090217.jpg
1 image files updated

c:\>exiftool -g1 -alldates X:\!temp15090217.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