Рекурсивно пакетные файлы процессов с pngquant - PullRequest
25 голосов
/ 10 марта 2012

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

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

Ответы [ 2 ]

54 голосов
/ 10 марта 2012

Если у вас ограниченная глубина каталогов и не слишком много файлов, то ленивое решение:

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 для папок с большим количеством маленьких изображений, чтобы сэкономить при запуске процесса).

15 голосов
/ 22 апреля 2014

С помощью fish shell вы можете запустить следующее из корневого каталога вашего проекта

pngquant **.png

, который будет генерировать новые файлы с расширениями, такими как -or8.png или -fs8.png.

Если вы хотите перезаписать существующие файлы, вы можете использовать

pngquant **.png --ext .png --force
...