我尝试过使用
find . | grep -v '(.ext1|.ext2)$'
但它仍会返回以扩展程序.ext1
和.ext2
结尾的文件。然后我尝试了以下内容:
ls | grep -v ".ext1$" | grep -v ".ext2$"
这就是我想要的方式。还有另一种方法可以做我正在寻找的东西吗?我想要做的就是列出所有不以.ext1
或.ext2
结尾的文件或目录。
答案 0 :(得分:3)
你没有逃过.
试试这个。它会工作。请记住,.
需要转义。
ls | grep -v '\.ext1$' | grep -v '\.ext2$'
同样适用于您的find
find . | grep -v '(\.ext1|\.ext2)$'
希望有所帮助:)
答案 1 :(得分:1)
您可以使用find
:
find . \! -name \*.ext1 \! -name \*.ext2
答案 2 :(得分:0)
这应该有效:
ls | grep "[^(\.ext1|\.ext2)]$"
答案 3 :(得分:0)
您正在使用需要grep -E
或egrep
的扩展正则表达式(ERE):
find . | grep -E -v '\.(ext1|ext2)$'
find . | egrep -v '\.(ext1|ext2)$'
我还逃脱了.
,所以它不被视为元字符。
当你编写它(grep -v '(.ext1|.ext2)$'
)时,括号和管道不是元字符(但是.
和$
都是),所以命令会删除如下名称:
(Xext1|Yext2)
function(Aext1|Bext2)
括号和管道实际上是文件名的一部分。