シェル並列最適化の使用

シェル並列最適化の使用

optipngシェルを使用して8スレッドCPUと並列に実行したいと思います。

私はプログラム自体がマルチコアに最適化されておらず、これを行う唯一の方法は8つのファイルを実行することです。

私のホームディレクトリには500以上のPNG画像があり、できるだけ早くこれを完了したいと思います。

回答されたが見つからない質問をすることもできます。

重要な場合は、このプログラムのエイリアスを定義しました。

alias optipng='optipng -o7 -zm1-9 -strip all -fix -preserve'

これが当てはまりますように。アドバイスしてください。簡単なほど良いです。 POSIXならベストです。

xargs私は、またはを使用したことがなく、parallel使用可能だと思います。

このコードが見つかりましたここに説明はありませんが、該当する場合は詳しく説明してください。

答え1

おそらくN個のファイル(Nは約500個)を処理する最も簡単な方法は、optipng.inN行の長さであり、各ファイルを処理するための1行を含むスクリプトを作成することです。

#!/bin/bash
for file in *.png; do
    printf 'optipng -o7 -zm1-9 -strip all -fix -preserve %q\n' "$file"
done > optipng.in

optipng.inファイルが正しいことを確認し、処理する各ファイルのそれぞれに対して正しいコマンドを発行してください。よさそうであることを確認したら、次のようにNコマンドを実行してくださいparallel

parallel < optipng.in

このサイズの実行では、標準出力と標準エラーをキャプチャして、どのファイルが正常に処理されているか、どのファイルがエラーを引き起こす可能性があるかを確認することをお勧めします。

parallel < optipng.in > optipng.out 2>&1

さらに改善するには、optipngなどの各呼び出しに対してstdin / stdoutリダイレクトを分離することが含まれます。

関連情報