-findコマンドで-execをxargsに変換する

-findコマンドで-execをxargsに変換する

dos2unixWindowsからLinuxにコピーされたファイルに対して操作を実行するために、スクリプトは次のコマンドを使用しています。ファイル数が多いため、この操作にはかなり時間がかかります。

これを最適化するためにインターネットを検索した結果、xargswithをfind代わりに使用して-execパフォーマンスを向上させることができることがわかりましたが、次のものをwithに使用するように変換するのが困難ですxargs

find /path_to_files/ -exec bash -c 'dos2unix -k -n "{}" tmp_file && mv tmp_file "{}"' \;

ベストアンサー1

実際にははるかに簡単です。フラグを指定しないと、オブジェクトファイルはすでに変更されているmvため、シェルを呼び出すか使用する必要はありません。dos2unix-n

find /path_to_files -type f -exec dos2unix -k -q -- {} +

-type fこのように、findはディレクトリではなく通常のファイルのみを検索します。標準出力に情報メッセージを書き込まないように-qフラグを付けます。代わりに、見つかった各ファイルに対してプロセスを呼び出さずに引数()と同じ数のファイルを提供するためにfindをdos2unix使用します。{} +{} \;dos2unixdos2unix file1 file2 file3 ...

Xargsは追加プロセスにすぎないため、追加の時間ペナルティが発生します。可能であれば、新しいプロセスを呼び出さないでください。

おすすめ記事