web-dev-qa-db-ja.com

findおよびxargsから-print0および-0フラグを削除する

ほぼ10年前、私はこの質問をしました

LinuxでSEDを再帰的に使用しますか?

この便利なコマンドを取得しましたfind . -type f -print0 | xargs -0 sed -i 's/regex_search_term/replace_term/g'

findxargs、およびsedステートメントについて詳しく知ることにしました。 bashバージョン4.4.20(1)リリースのUbuntu 18.04では、ステートメントを次のように簡略化できます。

find . -type f -print | xargs sed -i 's/regex_search_term/replace_term/g'

次に、これを再び簡略化できます。

find . -type f | xargs sed -i 's/regex_search_term/replace_term/g'

だから私の質問は、それぞれfindxargs-print0フラグと一緒に-0フラグを使用しないことの欠点はありますか?また、-printフラグを完全に削除することには欠点がありますか?それらは、システムのようなさまざまなUNIXとの互換性のために明示的に使用されていますか?

2
John

-print0xargs -0を使用しないバージョンは、スペース、タブ、改行、引用符、円記号など、ファイル名に含まれるまれではあるが合法的な文字によって混乱します。ゼロバイト(ASCII NUL文字)はファイルパスでできないが発生する唯一のものであるため、区切り文字として使用すると、これらの潜在的な問題を回避できます。

しかし、実際にはもっと簡単な方法があります。最新バージョンのfindには、xargsコマンドで直接findと本質的に同じことを行う-exec ... +プライマリがあります。

find . -type f -exec sed -i 's/regex_search_term/replace_term/g' {} +

これにはxargsのすべてのオプションがあるわけではないため、通常のcollect-names-and-run-it以外のものが必要な場合でも、-print0 | xargs -0を使用する必要があります。

6
Gordon Davisson