2

我试过使用

find . | grep -v '(.ext1|.ext2)$'

但它仍然返回那些以扩展名.ext1.ext2. 然后我尝试了以下方法:

ls | grep -v ".ext1$" | grep -v ".ext2$" 

这就像我想要的那样工作。还有另一种方法可以做我正在寻找的东西吗?我要做的就是列出所有不以 or 结尾的文件或.ext1目录.ext2

4

4 回答 4

3

你还没有逃脱这个.尝试。它会起作用的。记住.需要逃脱。

ls | grep -v '\.ext1$' | grep -v '\.ext2$' 

你的也一样find

寻找 。| grep -v '(\.ext1|\.ext2)$'

希望有帮助:)

于 2013-08-12T18:52:14.833 回答
1

您可以通过以下方式完成所有操作find

find . \! -name \*.ext1 \! -name \*.ext2
于 2013-08-12T18:48:32.607 回答
0

您正在使用扩展正则表达式 (ERE),它需要grep -Eor egrep

find . | grep -E -v '\.(ext1|ext2)$'
find . | egrep   -v '\.(ext1|ext2)$'

我也逃脱了,.所以它不被视为元字符。

当您编写它时 ( grep -v '(.ext1|.ext2)$') 括号和管道不是元字符(而是.$是),因此该命令将消除以下名称:

(Xext1|Yext2)
function(Aext1|Bext2)

括号和管道实际上是文件名的一部分。

于 2013-08-12T19:03:05.333 回答
0

这应该工作:

ls | grep "[^(\.ext1|\.ext2)]$"
于 2013-08-12T18:53:03.267 回答