我认为这可以解决问题:
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$"