.ts
いくつかのファイルを含むReactアプリケーションがあります.tsx
現在の.tsファイルと.tsxファイルの内容を更新するには、2つの個別のコマンドを実行する必要があります。
internal-web main % cd src
src main % find . -name '*.tsx' -print0 | xargs -0 sed -i "" "s/SomeThing/SOME_THING/g"
src main % find . -name '*.ts' -print0 | xargs -0 sed -i "" "s/SomeThing/SOME_THING/g"
.tsファイルと.tsxファイルを同時に更新できるように、このコマンドを1つのコマンドにまとめる方法はありますか?
答え1
あなたはできます:
find . \( -name '*.tsx' -o -name '*.ts' \) -print0 |
xargs -0 sed -i "" "s/SomeThing/SOME_THING/g"
sed
または、はるかに簡単で移植性に優れています(ファイルが見つからないときに発生するエラーを防ぐ)。
find . \( -name '*.tsx' -o -name '*.ts' \) -exec sed -i "" "s/SomeThing/SOME_THING/g" {} +
とにかく、これは-i
標準オプションではないことに注意してくださいsed
。sed -i ""
FreeBSD実装を使用することをお勧めしますsed
(macOSでも利用可能)。他のほとんどのsed
実装はaをサポートしないか、aを省略する-i
必要があります""
。
答え2
-regex
代わりに結合フィルタを使用できます-name
。次のファイルが与えられると
src/
src/subdir-2
src/subdir-2/not-interesting.tsn
src/subdir-2/bar.ts
src/subdir-2/bar.tsx
src/subdir-2/not-interesting.not
src/subdir-1
src/subdir-1/not-interesting.tsn
src/subdir-1/foo.tsx
src/subdir-1/foo.ts
src/subdir-1/not-interesting.not
次のコマンドを使用してフィルタリングして.ts
ファイリング.tsx
できます。find src/ -regex '.+\.tsx?$'
src/subdir-2/bar.ts
src/subdir-2/bar.tsx
src/subdir-1/foo.tsx
src/subdir-1/foo.ts
答え3
find
この場合、実行する必要はありません。bash
シェル(globstar実装のいくつかのバグを修正するバージョン4.0以降、好ましくは5.0以降)を使用している場合は、代わりにglobbingを使用できます。
sed -i "" "s/SomeThing/SOME_THING/g" ./**/*.ts?(x)
これは特に、次のような拡張一致演算子を使用します。
'?(PATTERN-LIST)'
Matches zero or one occurrence of the given patterns.
shopt -s globstar
まず、globstar()と extglob
()を有効にする必要がありますshopt -s extglob
。
隠しファイルはスキップし、shopt -s dotglob
処理したい場合は追加してくださいfind
。