
Испытание: Мне нужно проанализировать вывод команды imagemagick "identify", чтобы обнаружить наличие определенной строки. Если ее нет, то я вывожу имя файла на экран.
Фон: У меня примерно 100 тыс. изображений миниатюр (Пример миниатюры, которую необходимо проанализировать). Мне нужно проверить каждую миниатюру, чтобы убедиться, что она была отрисована правильно. К счастью, «отрисовано правильно» можно определить по наличию красных пикселей в миниатюре. Используя команду «identify» в imagemagick, я могу вывести цветовую карту, которая будет содержать строку «(255, 0, 0) #FF0000 red».
Нуждаться: Используя скрипт bash, я могу легко получить все имена файлов и перебрать их. Мне нужно выяснить, какмолчапроанализируйте вывод и найдите совпадение строки и выведите имя файла, если оно не найдено.
В частности, я хочу создать скрипт, который будет выполнять следующие действия:
1) находит все файлы *.png в определенном каталоге.
2) для каждого файла выполните «identify -verbose» имолчапередать вывод в...
3) проанализируйте вывод, чтобы увидеть, существует ли строка «(255, 0, 0) #FF0000 red».
3а) если это так, я молча перехожу к следующему файлу.
3б) если нет, я вывожу имя файла.
В конечном итоге у меня останется небольшой список миниатюр, которые не содержат красных пикселей и требуют ручной проверки.
Любая помощь в создании этого скрипта будет полезна.большинствооценил.
решение1
Чтобы найти файлы, не имеющие красных пикселей:
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 добавляет имя файла к каждой строке вывода команды identify. Использование fgrep вместо grep просто ищет точные совпадения текста (быстрее). Флаг -q для fgrep сообщает ей не выводить никаких строк; просто установить статус на успех или неудачу.
Скрипт должен быть безопасен для имен файлов, содержащих пробелы.