web-dev-qa-db-ja.com

「.ts」を見つけるが「.d.ts」を見つけない

これでうまくいくと思いました:

find src -type f -regextype egrep -regex '.*(?<!\.d)\.ts'

しかし、それは何にもマッチしないようです。

私は that はうまくいくと思いますが、適切にエスケープしない限り、この "egrep"フレーバーは負の後方参照をサポートしないと思います。

参考のために、

 % find src -type f
src/code-frame.d.ts # <-- I want to filter this out
src/foo.ts
src/index.ts

検索結果から.d.tsファイルを除外する別の簡単な方法はありますか?

 % find --version
find (GNU findutils) 4.7.0-git
22
mpen

egrepがその構文をサポートしているとは思いません(あなたの表現はPerl互換の正規表現です)。ただし、例では正規表現を使用する必要はありません。複数の-nameをテストして適用します!必要に応じて否定:

find src -type f -name '*.ts' ! -name '*.d.ts'
71
bxm

ファイル名のみでフィルタリングし、不要なファイルのテストを無効にすることで、必要な結果を得ることができます。

find src -type f -name \*.ts ! -name \*.d.ts
29
Stephen Kitt

簡単な(おそらく効率が悪い)アプローチは、不要な文字列を除外することができます。

find -name "*.ts" | egrep -v "\.d\.ts$"
6
alessiosavi