Shell-对目录中的所有文件执行imagemagic并存储结果

时间:2018-10-29 15:39:15

标签: bash shell imagemagick

我需要执行下一个 imagemagick 命令

convert some_image.jpeg logo: -fuzz 0% -negate -threshold 0 -negate -format "%[fx:100*mean]" info:

用于某个目录中的所有jpeg图像。上面的命令将返回百分比数字(例如95.922983.4128)。我需要将该数字与某个阈值(例如98%)进行比较,如果百分比大于阈值,则将文件移至另一个目录。

目前我所拥有的是:

for filename in /writeData/TAX1040/*.jpeg; do
    white=$(convert $(filename) logo: -fuzz 0% -negate -threshold 0 -negate -format "%[fx:100*mean]")
    echo -n "$white"
done

我有一个missing an image filename错误。

感谢@oliv,我有一个有效的脚本:

#!/usr/bin/env bash
mkdir -p /writeData/TAX1040/blank

for filename in /writeData/TAX1040/*.jpeg; do
    white=`convert $filename logo: -fuzz 0% -negate -threshold 0 -negate -format "%[fx:100*mean]" info:`

    p=${white:0:2}

    if [ "$p" -ge 98 ]; then
        echo "Percentage of white in file $filename is $p"
        echo "Moving file $filename to blank directory"
        mv "$filename" /writeData/TAX1040/blank
    fi
done

1 个答案:

答案 0 :(得分:2)

该文件必须与"$filename"一起使用,而不是与实际上执行命令$(filename)(可能会失败)的filename一起使用。

假设您的convert命令行正确,则可以像下面这样检查值:

threshold=98
for filename in /writeData/TAX1040/*.jpeg; do
  white=$(convert "$filename" logo: -fuzz 0% -negate -threshold 0 -negate -format "%[fx:100*mean]")
  if(( white > threshold )); then
     mv "$filename" /to/another/path
done

请注意,在算术表达式((...))中,无需使用$进行扩展。