2012-03-10 87 views
23

我有很多想用pngquant处理的图像。他们是在一个漂亮的深目录结构进行组织,所以它是非常耗时的手动cd到到每一个目录,然后运行pngquant -ext .png -force 256 *.png用pngquant递归批处理文件

有没有办法让这个命令在每个*在内的每个目录运行巴纽目前的一个,尽可能多的层深?

+1

什么操作系统是你吗? – Manish 2012-03-10 19:30:47

回答

47

如果你有目录的深度有限,并没有太多的文件,那么懒惰的解决方案:

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定义了一个在一个pngquant调用中处理图像的数量(我使用-L4用于具有大量小图像的文件夹以节省进程启动时间)。

+2

'发现。 -name'* .png'-exec pngquant -ext .png -force 256 {} \;'对我来说很漂亮。谢谢。 – cmal 2012-03-10 20:05:00

+0

谢谢你的回答,对我来说就像一个魅力。不过,你能否解释关于内核数量的语法?这是一个pngquant选项还是一个OS选项,它将任务分开并给每个线程提供一些图像? – Nicolas 2012-12-10 20:23:59

+0

@Stewie是'xargs''选项,它告诉它并行执行多个任务。 – Kornel 2012-12-11 18:16:01

13

随着fish shell可以运行在你的项目目录

pngquant **.png 

的根将产生与像-or8.png-fs8.png扩展新文件以下。

如果要覆盖现有文件,可以使用

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