如何在unix中通过排除某些文件扩展名来搜索目录

如何在unix中通过排除某些文件扩展名来搜索目录,unix,grep,find,ls,Unix,Grep,Find,Ls,我试过使用 find . | grep -v '(.ext1|.ext2)$' 但它仍然返回以扩展名.ext1和.ext2结尾的文件。然后我尝试了以下方法: ls | grep -v ".ext1$" | grep -v ".ext2$" 这就是我想要的。有没有其他方法来完成我想要的?我要做的就是列出所有不以.ext1或.ext2结尾的文件或目录。您可以使用查找: find . \! -name \*.ext1 \! -name \*.ext2 您可以使用查找: find . \! -n

我试过使用

find . | grep -v '(.ext1|.ext2)$'
但它仍然返回以扩展名
.ext1
.ext2
结尾的文件。然后我尝试了以下方法:

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

这就是我想要的。有没有其他方法来完成我想要的?我要做的就是列出所有不以
.ext1
.ext2
结尾的文件或目录。您可以使用
查找

find . \! -name \*.ext1 \! -name \*.ext2

您可以使用
查找

find . \! -name \*.ext1 \! -name \*.ext2

您还没有逃过
尝试此操作。它会起作用的。记住
需要转义

ls | grep -v '\.ext1$' | grep -v '\.ext2$'
希望有帮助:)

您还没有逃脱
的考验。它会起作用的。记住
需要转义

ls | grep -v '\.ext1$' | grep -v '\.ext2$' 希望有帮助:)

这应该可以:

ls | grep "[^(\.ext1|\.ext2)]$"
这应该起作用:

ls | grep "[^(\.ext1|\.ext2)]$"

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

find . | grep -E -v '\.(ext1|ext2)$'
find . | egrep   -v '\.(ext1|ext2)$'
我还转义了
,因此它不被视为元字符

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

(Xext1|Yext2)
function(Aext1|Bext2)

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

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

find . | grep -E -v '\.(ext1|ext2)$'
find . | egrep   -v '\.(ext1|ext2)$'
我还转义了
,因此它不被视为元字符

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

(Xext1|Yext2)
function(Aext1|Bext2)

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

不会转义。。。转义它,两者都应该起作用您排除了什么?
没有转义。。。逃避它,两者都应该起作用你排除了什么?双
grep
会起作用,但不是最优的(与
grep-E
egrep
相比)。JonathanLeffler是的,它不会那么快。你是对的。。。这将需要更多的时间。。然而,OP在另一个回复中特别询问了他的代码有什么问题。这就是我这样做的原因。我相信从
find
的例子中,他会理解的。我确实理解。我最喜欢这个答案,因为它解释了我在例子中做错了什么。谢谢双
grep
可以工作,但不是最优的(与
grep-E
egrep
相比)。@JonathanLeffler是的,它不会那么快。。你是对的。。。这将需要更多的时间。。然而,OP在另一个回复中特别询问了他的代码有什么问题。这就是我这样做的原因。我相信从
find
的例子中,他会理解的。我确实理解。我最喜欢这个答案,因为它解释了我在例子中做错了什么。谢谢