find命令配合exiftool将jpg所属文件夹名设为序列号的参数替换方案
解决方案
你可以根据自己需要的序列号格式选择对应方案:
方案1:使用exiftool内置路径变量(推荐)
exiftool自带directory内置变量可直接读取当前匹配文件的目录路径,注意在shell中执行时需要对$加转义符,避免变量被shell提前解析,同时补全find命令缺失的文件占位符{}和结束符\;即可。
- 如果要把文件所在目录的完整路径设为序列号,使用以下命令:
find . -type f -name "*.jpg" -exec exiftool -SerialNumber="\${directory}" {} \;
- 如果要把文件所在目录的最后一级名称(比如路径为
./trip/20240501/1.jpg就取20240501)设为序列号,使用以下命令:
find . -type f -name "*.jpg" -exec exiftool -SerialNumber="\${directory;s/.*\///}" {} \;
方案2:借助shell处理路径
如果你习惯用shell命令提取目录,可以调用bash子进程处理:
- 以完整目录路径作为序列号的命令:
find . -type f -name "*.jpg" -exec bash -c 'dir=$(dirname "{}"); exiftool -SerialNumber="$dir" "{}"' \;
补充说明
exiftool默认会为修改的文件生成带_original后缀的备份,如果不需要备份,可以在exiftool参数中加入-overwrite_original直接覆盖原文件。
内容的提问来源于stack exchange,提问作者Noppe Cederqvist
相关产品推荐
相关产品推荐

