找到“.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$"

相关内容