ほぼ10年前、私はこの質問をしました
この便利なコマンドを取得しましたfind . -type f -print0 | xargs -0 sed -i 's/regex_search_term/replace_term/g'
find
、xargs
、および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'
だから私の質問は、それぞれfind
とxargs
の-print0
フラグと一緒に-0
フラグを使用しないことの欠点はありますか?また、-print
フラグを完全に削除することには欠点がありますか?それらは、システムのようなさまざまなUNIXとの互換性のために明示的に使用されていますか?
-print0
とxargs -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
を使用する必要があります。