0

我很陌生,正则表达式对我来说一直很棘手。我希望有人可以快速为我纠正这个问题,甚至可以告诉我为什么这不是我认为应该这样做的(目标是排除某些类型的文件):

find . -type f \( -name "*" ! -name "*\.(vm | jar | class | htm | html | jpg | gif)$" \)

提前致谢。

4

3 回答 3

2

我不熟悉 find 命令语法,但是要匹配具有给定扩展名的文件,您需要:

".*\.(vm|jar|class|htm|html|jpg|gif)$"

删除空格并在开头添加点。

于 2012-12-20T14:57:24.987 回答
2

看起来问题是关于 Unix shell 的......

无论如何,在我更了解的正则表达式方面,我认为您必须删除表达式中的空格:

"\.(vm|jar|class|html?|jpg|gif)$"

我不保证您的命令本身的有效性...

于 2012-12-20T14:58:15.640 回答
1

我很确定find默认会查找每个名称,因此这里不需要额外的“ -name "*" ”。

在正则表达式方面,您似乎已经找到了您正在寻找的答案,但您可能仍然想知道find有一个OR标志(-or 或 -o),当正则表达式导致您时,它可以使事情变得更容易烦恼:

find . -type f ! \( -name "*.vm" -o -name "*.jar" -o -name ".class" \)

不利的一面是,显然要写更长的时间……

记得看一下man find

祝你好运

于 2012-12-20T15:35:57.490 回答