「.ts」は見つかりましたが、「.d.ts」は見つかりませんでした。

「.ts」は見つかりましたが、「.d.ts」は見つかりませんでした。

私はこれがトリックを実行すると思います。

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

しかし、何も一致しないようです。

私の考えではそれうまくいきますが、この「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

答え1

構文がサポートされていないようですegrep(あなたの式はPerl互換の正規表現です)。ただし、例では正規表現を使用する必要はなく、複数の-nameテストを実行し、!必要に応じて否定を適用するだけです。

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

答え2

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

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

答え3

不要な文字列をフィルタリングする簡単な(おそらく効率が悪い)方法です。

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

関連情報