
Как получить сведения об изображениях из всех папок и подпапок с помощью ImageMagick в этом формате.
file-name file-location file-format size width height
PS - Я прочитал эту страницуhttp://www.imagemagick.org/script/escape.phpно не могу найти, как получить путь к расположению файла и как включить файлы в подпапки.
решение1
Я почти уверен, что ImageMagick не будет работать рекурсивно, как это само по себе. Вам нужно будет написать скрипт/программу вокруг него, чтобы работать со структурой каталогов и вызывать его один раз для каждого файла, который вы хотите проверить.
решение2
Следующая команда вернет нужную вам информацию:
identify -format "%f %d %m %b %w %h\n" ./* ./*/*
- Последовательность выхода для файлового каталога —
%d
. - Чтобы включить все файлы в текущей папке, используйте
./*
(подстановочный знак оболочки). - Чтобы включить все файлы во всех подпапках, используйте
./*/*
(подстановочные знаки оболочки).
(Вы не указали, какая у вас операционная система. Вышеуказанное будет работать для Linux, Unix и Mac OS X. Для Windows используйте .\*.*
и .\*.*\*.*
в качестве подстановочных знаков.)
Внимание!, если в ваших папках есть файлы не-изображения или документы PDF, эта команда может выполняться довольно долго. Файлы не-изображения выдадут сообщение об ошибке типа
identify: no decode delegate for this image format `EXE' @ error/constitute.c/ReadImage/501.
Этого можно избежать, перенаправив все сообщения об ошибках в /dev/null
.
Поэтому, возможно, лучше использовать такой вариант:
identify \
-format "%f %d %m %b %w %h\n" \
*.{jpg,jpeg,JPG,png,tif,tiff,ppm,gif} \
*/*.{jpg,JPG,jpeg,png,tif,tiff,ppm,gif} \
2>/dev/null
Вот пример из Mac OS X:
delta.jpg #12649876 JPEG 17441B 307 205 CMYK_separation_–_maximum_black.jpg #21270389 JPEG 1453360B 1600 4780 HFnCz.jpg #21270389 JPEG 356748B 1600 1195 объединенный.jpg #21270389 JPEG 528221B 1600 1195 разрешение.jpg #26408022 JPEG 57546B 603 300 красный-500x2000.jpg #26951336 JPEG 6288B 500 2000 resized-red-2000x2000.jpg #26951336 JPEG 7430B 1000 1000 большой-край-25.jpg #27290574 JPEG 98916B 1024 288 большой.jpg #27290574 JPEG 19216B 1024 576 двойной.jpg #27290574 JPEG 35076B 480 270 small.jpg #27290574 JPEG 20716B 720 404
(Да, я выполнил эту команду в каталоге, в котором есть подкаталоги с именами #27290574
, #26951336
и тому подобное....)
Возможно, вы захотите, чтобы вывод выглядел более таблично. Для этого передайте результаты через column -t
. Попробуйте это:
identify \
-format "%f %d %m %b %w %h\n" \
*.{jpg,jpeg,JPG,png,tif,tiff,ppm,gif} \
*/*.{jpg,JPG,jpeg,png,tif,tiff,ppm,gif} \
2>/dev/null | column -t
Результат в моем случае:
delta.jpg #12649876 JPEG 17441B 307 205 CMYK_separation_–_maximum_black.jpg #21270389 JPEG 1453360B 1600 4780 HFnCz.jpg #21270389 JPEG 356748B 1600 1195 объединенный.jpg #21270389 JPEG 528221B 1600 1195 разрешение.jpg #26408022 JPEG 57546B 603 300 красный-500x2000.jpg #26951336 JPEG 6288B 500 2000 resized-red-2000x2000.jpg #26951336 JPEG 7430B 1000 1000 большой-край-25.jpg #27290574 JPEG 98916B 1024 288 большой.jpg #27290574 JPEG 19216B 1024 576 двойной.jpg #27290574 JPEG 35076B 480 270 small.jpg #27290574 JPEG 20716B 720 404