Рекурсивно пакетные файлы процесса с pngquant
У меня есть много изображений, которые я хотел бы обработать с помощью pngquant. Они организованы в довольно глубокую структуру каталогов, поэтому вручную занимает cd
вручную в каждый каталог и запускать pngquant -ext .png -force 256 *.png
Есть ли способ заставить эту команду запускаться на каждом *.png в каждом каталоге в текущем, так же много слоев, сколько необходимо?
Ответы
Ответ 1
Если у вас ограниченная глубина каталогов и не слишком много файлов, то ленивое решение:
pngquant *.png */*.png */*/*.png
Стандартное решение:
find . -name '*.png' -exec pngquant --ext .png --force 256 {} \;
и многоядерная версия:
find . -name '*.png' -print0 | xargs -0 -P8 -L1 pngquant --ext .png --force 256
где -P8
определяет количество процессоров, а -L1
определяет количество изображений для обработки в одном вызове pngquant (я использую -L4
для папок с большим количеством небольших изображений для сохранения при запуске процесса).
Ответ 2
С оболочкой рыбы вы можете запустить следующее из корня каталога вашего проекта
pngquant **.png
Что будет генерировать новые файлы с расширениями, такими как -or8.png
или -fs8.png
.
Если вы хотите перезаписать существующие файлы, вы можете использовать
pngquant **.png --ext .png --force