36コアシステムで10Mファイルのパターンをすばやく見つけたいです。これを試しました。
find . -name '*.xml' -type f | xargs -P 20 grep "username" >> output
しかし、その間に他の結果も得ました。
これを行うより良い方法はありますか?
よろしくお願いします。
ベストアンサー1
データがRAIDではなくHDDにあることを考えると、並列化によってより良いパフォーマンスが得られるかどうか疑問です。ボトルネックはCPUではなくI/Oである可能性が高いです。
LC_ALL=C grep -rwF --include='*.xml' username . > /on/some/other/disk/output
おそらくあなたが得ることができる最高に近いです。
並列化するには、次のことが必要です。
LC_ALL=C find . -name '*.xml' -type f -print0 |
LC_ALL=C xargs -r0P20 -n 1000 grep -HFw --line-buffered username > output
4KiBより長い出力ライン(入力ライン+ファイルパス名)がないと仮定し、20本の同時grepラインが最終的にインターリーブされることに注意してください。
望むより:
もっと学ぶ。