Как я могу рекурсивно удалить информацию 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