J'ai beaucoup d'images que je voudrais traiter avec pngquant. Ils sont organisés dans une structure de répertoires assez profonde, il est donc très temps de consommer manuellement cd
dans chaque répertoire et exécuter pngquant -ext .png -force 256 *.png
Existe-t-il un moyen de faire fonctionner cette commande sur tous les * .png dans chaque répertoire de l'actuel, autant de couches profondes que nécessaire?
Si vous avez une profondeur de répertoires limitée et pas trop de fichiers, alors la solution paresseuse:
pngquant *.png */*.png */*/*.png
Une solution standard:
find . -name '*.png' -exec pngquant --ext .png --force 256 {} \;
et version multi-noyau:
find . -name '*.png' -print0 | xargs -0 -P8 -L1 pngquant --ext .png --force 256
où -P8
Définit le nombre de processeurs et -L1
Définit un certain nombre d'images à traiter dans un appel pngquant (j'utilise -L4
Pour les dossiers avec beaucoup de petites images pour économiser sur le processus de début).
Avec le coquille de poisson Vous pouvez exécuter les éléments suivants à partir de la racine de votre répertoire de projet
pngquant **.png
Qui générera de nouveaux fichiers avec des extensions comme -or8.png
ou -fs8.png
.
Si vous souhaitez écraser les fichiers existants, vous pouvez utiliser
pngquant **.png --ext .png --force