这个正则表达式使用什么工具
What tool to use for this regex
我正在使用 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:: ::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 替换为从文件名中提取的日期。我觉得我很接近,它只是连接最后的点。
如果您使用 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
我正在使用 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:: ::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 替换为从文件名中提取的日期。我觉得我很接近,它只是连接最后的点。
如果您使用 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