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

时间:2013-08-12 18:46:00

标签: unix grep find ls

我尝试过使用

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

但它仍会返回以扩展程序.ext1.ext2结尾的文件。然后我尝试了以下内容:

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

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

4 个答案:

答案 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 -Eegrep的扩展正则表达式(ERE):

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

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

当你编写它(grep -v '(.ext1|.ext2)$')时,括号和管道不是元字符(但是.$都是),所以命令会删除如下名称:

(Xext1|Yext2)
function(Aext1|Bext2)

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