web-dev-qa-db-fra.com

Fichiers de processus de lot récursivement avec pngquant

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?

29
cmal

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

-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).

55
Kornel

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
15
Dennis