Перемещение изображений на основе метаданных IPTC в bash - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь реорганизовать изображения в зависимости от вида, который находится внутри изображения.Помимо другой информации, название вида можно найти в метаданных IPTC (см. Ссылку на изображение инспектора ).Я пытаюсь сделать это в bash на macOS и пробовал следующий код (с именем вида каталога и каталогом):

find . -iname "*.jpg" -print0 | xargs -0 grep -l "Species Name" | xargs -0 -I {} mv {} ~/example/directory

Я также пытался использовать пакет exiftool,где соответствующая информация находится в теге Subject:

find . -iname "*.jpg" -print0 | xargs -0 exiftool -Subject | grep "Species Name" | xargs -0 -I {} mv {} ~/example/directory

Однако я получаю следующее сообщение об ошибке, которое, как я полагаю, является результатом неправильного использования grep или последнейxargs:

mv: rename (standard input) to ~/example/directory(standard input) : No such file or directory

Есть идеи, что может решить эту проблему?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Exiftool может перемещать и переименовывать файлы на основе метаданных файла и гораздо быстрее вызывать его один раз для всего каталога, чем вызывать его отдельно для каждого файла в цикле ( Распространенная ошибка # 3 ).

Я полагаю, что вы можете использовать эту команду для сортировки:
exiftool -if '$subject=~/Species Name/i' -directory=~/example/directory .

Разбивка:
-if '$subject=~/Species Name/i' Проводит ли регулярное выражение тег Subject для«Название вида».Я добавил i в конце, чтобы сделать регистр сравнения нечувствительным, измените его по желанию.
-directory=~/example/directory Если условие -if выполнено, файл будет перемещен в указанный каталог.

0 голосов
/ 21 мая 2018

Похоже, что выходной символ новой строки grep мешает, так как вы используете чистый -0 конвейер, вы должны сделать это с grep - в Linux это будет grep -Z ... (или * 1005)*), не знаю, есть ли у Mac OS аналогичный.

...