文件名包含需要转换为英寸的像素尺寸

时间:2015-01-29 18:36:43

标签: bash sh exiftool

我即将收到1000多个需要重命名的文件,因此名称包含其打印尺寸。我已经想出如何提取像素尺寸并重命名文件以包含exiftool,但我不确定什么是自动化像素到英寸计算和后续重命名的最佳方法。

这就是exiftool正在做的事情:

exiftool '-filename<%f_h${ImageHeight}w${ImageWidth}r${XResolution}.${FileType}'

因此466001004_cc.jpg的原始文件名重命名为466001004_cc_h5280w4080r120.jpg,现在我需要将52804080除以120以获得英寸值。

最终文件名应如下所示:466001004_cc_044x034.jpg

非常感谢任何帮助,谢谢!

1 个答案:

答案 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

...如果它正确地转储了你的所有文件名,你就会很好。对于大量文件,您需要用

之类的内容替换for
find . -name "*.jpg" | while read file; do
    file=$(basename $file)

......实际上,这是一个非常简单的修复方法。脚本的其余部分将保持不变。