1

Задача: мне нужно проанализировать вывод команды imagemagick "определить", чтобы обнаружить наличие определенной строки. Если его не существует, я отображаю имя файла на экране.

Фон: у меня есть примерно 100k миниатюрных изображений (пример миниатюры, которую нужно проанализировать). Мне нужно проверить каждую миниатюру, чтобы убедиться, что она отображается правильно. К счастью, "правильно отрендерено" можно определить по наличию красных пикселей на миниатюре. Используя команду imagemagick "определить", я могу вывести цветовую карту, которая будет содержать строку «(255, 0, 0) # FF0000 red».

Нужно: используя скрипт bash, я могу легко получить все имена файлов и перебрать их. Мне нужно выяснить, как молча разобрать выходные данные и найти совпадение строк и отобразить имя файла, если оно не найдено.

В частности, я хочу создать скрипт, который выполняет следующие действия:

1) находит все файлы * .png в определенном каталоге.

2) для каждого файла, запустить «идентифицировать -verbose» и молча передать вывод ...

3) проанализируйте вывод, чтобы увидеть, существует ли строка «(255, 0, 0) # FF0000 red».

3а) если это произойдет, я продолжаю молча перейти к следующему файлу.

3b) если это не так, я повторяю имя файла.

В конечном счете, у меня останется короткий список миниатюр, которые не содержат красных пикселей и требуют ручной проверки.

Любая помощь в создании этого скрипта будет наиболее ценной.

1 ответ1

0

Чтобы найти файлы без красных пикселей:

for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \$0}" | fgrep -q '(255,  0,  0) #FF0000 red' || echo $i; done

Чтобы найти файлы с красными пикселями:

for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \$0}" | fgrep -q '(255,  0,  0) #FF0000 red' && echo $i; done

Команда gawk добавляет имя файла к каждой строке вывода команды идентификатора. Использование fgrep вместо grep просто ищет точные совпадения текста (быстрее). Флаг -q для fgrep говорит ему не выводить никаких строк; просто чтобы установить статус успеха или неудачи.

Скрипт должен быть безопасным для имен файлов, которые содержат пробелы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .