Подтвердить что ты не робот

Рекурсивно пакетные файлы процесса с pngquant

У меня есть много изображений, которые я хотел бы обработать с помощью pngquant. Они организованы в довольно глубокую структуру каталогов, поэтому вручную занимает cd вручную в каждый каталог и запускать pngquant -ext .png -force 256 *.png

Есть ли способ заставить эту команду запускаться на каждом *.png в каждом каталоге в текущем, так же много слоев, сколько необходимо?

4b9b3361

Ответ 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