web-dev-qa-db-ja.com

pngquantでプロセスファイルを再帰的にバッチ処理する

Pngquantで処理したい画像がたくさんあります。それらはかなり深いディレクトリ構造で編成されているため、手動ですべてのディレクトリにcdを実行してpngquant -ext .png -force 256 *.pngを実行するのは非常に時間がかかります

このコマンドを現在のディレクトリ内のすべてのディレクトリのすべての* .pngで実行する方法はありますか?

29
cmal

ディレクトリの深さが限られていて、ファイルが多すぎない場合は、遅延ソリューション:

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はCPUの数を定義し、-L1は、1回のpngquant呼び出しで処理する画像の数を定義します(私は-L4(プロセスの開始時に保存する小さな画像がたくさんあるフォルダの場合)。

55
Kornel

fish Shell を使用すると、プロジェクトディレクトリのルートから以下を実行できます

pngquant **.png

-or8.png-fs8.pngなどの拡張子を持つ新しいファイルが生成されます。

既存のファイルを上書きしたい場合は、

pngquant **.png --ext .png --force
15
Dennis