私はこの乱交を持っています:
replace="s/AAAA/BBBB/g";
find myDirectory/. -type f -print0 | xargs -0 sed -i $replace;
これはツリーを再帰的にスキャンし、その中のすべてのファイルをmyDirectory
置き換えます。AAAA
BBBB
しかし、特定の拡張子を持つファイルでのみこれが発生するように制限したいと思います.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" {} +