I have a lot of images that I would like to process with pngquant. They are organized in a pretty deep directory structure, so it is very time-consuming to manually cd
into every directory and run pngquant -ext .png -force 256 *.png
Is there a way to get this command to run on every *.png in every directory within the current one, as many layers deep as necessary?
If you have limited depth of directories and not too many files, then lazy solution:
pngquant *.png */*.png */*/*.png
A standard solution:
find . -name '*.png' -exec pngquant --ext .png --force 256 {} \;
and multi-core version:
find . -name '*.png' -print0 | xargs -0 -P8 -L1 pngquant --ext .png --force 256
where -P8
defines number of CPUs, and -L1
defines a number of images to process in one pngquant call (I use -L4
for folders with a lot of small images to save on process start).
With the fish shell you can run the following from the root of your project directory
pngquant **.png
Which will generate new files with extensions like -or8.png
or -fs8.png
.
If you want to overwrite the existing files, you can use
pngquant **.png --ext .png --force
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With