0

我即将收到 1000 多个需要重命名的文件,以便名称包含它们的打印尺寸。我已经想出了如何提取像素尺寸并重命名文件以使用 exiftool 包含该文件,但我不确定将像素自动计算为英寸并随后重命名的最佳方法是什么。

这就是 exiftool 正在做的事情:

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

所以原始文件名466001004_cc.jpg被重命名为466001004_cc_h5280w4080r120.jpg,现在我需要除以得到5280英寸值。4080120

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

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

4

1 回答 1

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 是您插入的。如果这是基本文件名的一部分,我的脚本将会中断。

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

简易测试:

for file in *; do echo $file; done

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

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

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

于 2015-01-29T18:59:29.057 回答