Используя Bash find для рекурсивной проверки не квадратных размеров изображения jpg, я очень близко - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь рекурсивно l oop пройти по всем каталогам и распечатать полный список путей всех jpg-файлов, которые не являются идеально квадратными.

Вот что я использовал, чтобы найти каталоги между 2 и 6 Глубоко, что отсутствует обложка. jpg:

find . -mindepth 2 -maxdepth 6 -type d '!' -exec test -e "{}/cover.jpg" ';' -print

Затем я изменил это, чтобы попытаться найти не квадратные изображения:

find . -mindepth 2 -maxdepth 6 -type d '!' -exec identify -format '%[fx:(h == w)]' "{}/cover.jpg" ';'

Выше очень близко к работе, он начинает выводит 0 и 1 в зависимости от того, является ли он квадратным или нет, но 0 или 1 выводится в ту же строку вместо новой строки, и он просто продолжается в той же строке, что и при проверке файлов.

1111111111111111111111111111111001100101101110111001110010101001011000001101

Я думал, если бы он выводил по 1 или 0 на строку, я мог бы выполнить поиск, если 0 , и распечатать путь к файлу.

У меня нет тонны Bash опыта, и пока мне не везет. Цени любую помощь.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Из документации imagemagick я думаю, что вы можете просто добавить новую строку (и путь) к формату:

find . -mindepth 2 -maxdepth 6 -type d '!' -exec \
    identify -format '%[fx:(h == w)] %d/%f\n' "{}/cover.jpg" ';' |\
sed -n '/^0 / s///p'

(непроверенный код, так как у меня не установлен imagemagick . Команда sed реализует grep и удаляет начальный ноль, который был добавлен.)

1 голос
/ 06 февраля 2020

Это может быть проще сделать с al oop.

find . -mindepth 2 -maxdepth 6 -type d '!' | while read file; do #Piping find results into loop

    identify -format '%[fx:(h == w)]' "$file/cover.jpg" ';' #For each file, it runs the command you gave
    printf "\n" #Prints a new line

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