2012-03-10 127 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