Shell - Выполнить imagemagic для всех файлов в каталоге и сохранить результат - PullRequest
0 голосов
/ 29 октября 2018

Мне нужно выполнить следующую команду 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 голосов
/ 29 октября 2018

Файл должен использоваться с "$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

Обратите внимание, что в арифметическом выражении ((...)) вам не нужно использовать $ для расширения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...