特定のファイル拡張子の文字列の検索と置換

特定のファイル拡張子の文字列の検索と置換

私はこの乱交を持っています:

  replace="s/AAAA/BBBB/g";
  find myDirectory/. -type f -print0 | xargs -0 sed -i $replace;

これはツリーを再帰的にスキャンし、その中のすべてのファイルをmyDirectory置き換えます。AAAABBBB

しかし、特定の拡張子を持つファイルでのみこれが発生するように制限したいと思います.txt.read.po

この制限をどのように課しますか?

ベストアンサー1

-name検索オプションを使用して、ファイル名に基づいて一致を制限できます。

find myDirectory/. -type f -name '*.txt' -print0 | xargs -0 sed -i "$replace"

複数の拡張機能の場合-o(または)を使用してグループ化できます()

find myDirectory/. -type f \( -name '*.txt' -o -name '*.read' \) -print0 | xargs -0 sed -i "$replace"

-exec代わりに使用できるもう1つの改善点は、xargs移植性に優れ、サブシェルを削除することです。

find myDirectory/. -type f -name '*.txt' -exec sed -i "$replace" {} +

おすすめ記事