Как я могу рекурсивно удалить информацию exif из всех изображений в каталоге?

for i in *.jpg; do echo "Processing $i"; exiftool -all= "$i"; done

Мне нужно адаптировать эту строку кода, которая удаляет всю exif-информацию из изображений в каталоге. Мне это нужно;

  • не сбой, если текущий каталог пуст
  • быть рекурсивным для работы с подкаталогами
  • cover *.gif *.jpeg *.png также

Кто-нибудь может указать мне правильное направление?

2 ответа

Решение

Нет необходимости в скрипте, ExifTool может сделать это сам, и это будет намного быстрее, чем циклически проходить по элементам.
exiftool -r -all= -ext jpg -ext gif -ext png /path/to/top/directory/

-r просматривать через подкаталоги
-ext … ограничить количество обрабатываемых файлов указанными расширениями, удалите эти элементы, чтобы обработать все файлы, для которых Exiftool может удалить метаданные.

Поскольку exiftool потрясающий, то в этом нет необходимости, но в принципе вы могли бы сделать с find что-то вроде этого...

Сначала убедитесь, что ваш поиск находит то, что вы хотите (используя -iname, чтобы сделать поиск без учета регистра, так как оба .JPG а также .jpg и т. д. распространены)

find . -iname '*.jpg' -or -iname '*.png' -or -iname '*.jpeg' -or -iname '*.gif' 

if выведет список найденных файлов с путями, начинающимися здесь (включая подкаталоги)

затем повторите добавление команды, чтобы воздействовать на файлы, найденные в конце | xargs exiftool -all=

find . -iname '*.jpg' -or -iname '*.png' -or -iname '*.jpeg' -or -iname '*.gif' | xargs exiftool -all=

или безопаснее, если в именах файлов есть пробелы, чтобы вместо пробелов использовать null:

find . -iname '*.jpg' -print0 -or -iname '*.png' -print0 -or -iname '*.jpeg' -print0 -or -iname '*.gif' -print0 | xargs --null exiftool -all=

Если ничего не совпадает (например, каталог пуст), то он ничего не делает

. текущий рабочий каталог. Если вас там нет, замените find . с find /path/to/parent/directory

Другие вопросы по тегам