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

File name contains pixel dimensions that need to be converted to inches

我即将收到 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

任何帮助将不胜感激,谢谢!

# file looks like: 466001004_cc_h5280w4080r120.jpg
for file in *; do
    read basename w h <<< $(echo $file | awk -F_h '{print  " " }' | awk -Fr '{print }' | awk -Fw '{print  " " }')
    w=$(echo "$w 120 / p" | dc)
    h=$(echo "$h 120 / p" | dc)
    mv $file ${basename}_${w}x${h}.jpg
done

我假设文件名中唯一的_h 是您插入的。如果这是基本文件名的一部分,我的脚本就会中断。

我还假设文件名中没有空格(会破坏 "for" 命令),并且行长超过 Bash 可以处理的文件不多.

简单测试:

for file in *; do echo $file; done

...如果它正确地转储了所有文件名,那很好。对于大量文件,您需要将 for 替换为

find . -name "*.jpg" | while read file; do
    file=$(basename $file)

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