我即将收到1000多个需要重命名的文件,因此名称包含其打印尺寸。我已经想出如何提取像素尺寸并重命名文件以包含exiftool,但我不确定什么是自动化像素到英寸计算和后续重命名的最佳方法。
这就是exiftool正在做的事情:
exiftool '-filename<%f_h${ImageHeight}w${ImageWidth}r${XResolution}.${FileType}'
因此466001004_cc.jpg
的原始文件名重命名为466001004_cc_h5280w4080r120.jpg
,现在我需要将5280
和4080
除以120
以获得英寸值。
最终文件名应如下所示:466001004_cc_044x034.jpg
非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
# file looks like: 466001004_cc_h5280w4080r120.jpg
for file in *; do
read basename w h <<< $(echo $file | awk -F_h '{print $1 " " $2}' | awk -Fr '{print $1}' | awk -Fw '{print $1 " " $2}')
w=$(echo "$w 120 / p" | dc)
h=$(echo "$h 120 / p" | dc)
mv $file ${basename}_${w}x${h}.jpg
done
我假设您插入了文件名中唯一的_h。如果这是基本文件名的一部分,我的脚本将会中断。
我还假设文件名中没有空格(会破坏&#34; for&#34;命令),并且没有那么多文件,行长度比Bash可以处理的长。
简易测试:
for file in *; do echo $file; done
...如果它正确地转储了你的所有文件名,你就会很好。对于大量文件,您需要用
之类的内容替换forfind . -name "*.jpg" | while read file; do
file=$(basename $file)
......实际上,这是一个非常简单的修复方法。脚本的其余部分将保持不变。