[英]Optimize images in directory using multiple CPU cores
我在目錄中有幾個PNG圖像,我正在使用optipng
來優化和縮小圖像大小。 問題是優化所有文件需要很長時間。
我有一個四核處理器,我注意到optipng
在優化目錄時只使用了一個核心。
這是我正在使用的代碼:
ls -1 | while read line
do
optipng -o7 "$line"
done
在讀取目錄時是否可以並行執行四個不同文件的optipng
?
還有另一種涉及xargs
解決方案。
find some/dir/ -iname '*.png' -print0 | xargs -0 -n 1 -P 4 optipng -o7
其中-P 4
啟動4個並行進程, -n 1
每個進程最多使用一個文件名。
或者,如果您有換行符分隔的文件名,請使用:
find some/dir/ -iname '*.png' | sort | xargs -d \\n -n 1 -P 4 optipng -o7
更新:我編寫了一個shell腳本來為多個圖像並行調用zopflipng (比optipng提供更高的壓縮率): zopflipng_in_place
您需要將每個optipng
放在后台以使用四個核心,並使用計數器n
來跟蹤它們的數量。 我在這種情況下使用n=4
,因此在給定時間將運行4個后台作業:
n=0
for image in *
do
optipng -o7 "$image" &
n=$(( $n + 1 ))
[ "$n" -eq 4 ] && n=0 && wait
done
不要同時運行多個BG作業(保持n
低),或者還會有性能損失。 根據需要修改代碼,尤其是*
中for image in *
的*
pattern。
我使用與GNU並行的 optipng(包含在每個Linux發行版中):
parallel --bar 'optipng {}' ::: file1.png file2.png morefile*.png
優點:您有一個指示進度的欄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.