我试过使用
find . | grep -v '(.ext1|.ext2)$'
但它仍然返回那些以扩展名.ext1
和.ext2
. 然后我尝试了以下方法:
ls | grep -v ".ext1$" | grep -v ".ext2$"
这就像我想要的那样工作。还有另一种方法可以做我正在寻找的东西吗?我要做的就是列出所有不以 or 结尾的文件或.ext1
目录.ext2
。
你还没有逃脱这个.
尝试。它会起作用的。记住.
需要逃脱。
ls | grep -v '\.ext1$' | grep -v '\.ext2$'
你的也一样find
寻找 。| grep -v '(\.ext1|\.ext2)$'
希望有帮助:)
您可以通过以下方式完成所有操作find
:
find . \! -name \*.ext1 \! -name \*.ext2
您正在使用扩展正则表达式 (ERE),它需要grep -E
or egrep
:
find . | grep -E -v '\.(ext1|ext2)$'
find . | egrep -v '\.(ext1|ext2)$'
我也逃脱了,.
所以它不被视为元字符。
当您编写它时 ( grep -v '(.ext1|.ext2)$'
) 括号和管道不是元字符(而是.
和$
是),因此该命令将消除以下名称:
(Xext1|Yext2)
function(Aext1|Bext2)
括号和管道实际上是文件名的一部分。
这应该工作:
ls | grep "[^(\.ext1|\.ext2)]$"