我很陌生,正则表达式对我来说一直很棘手。我希望有人可以快速为我纠正这个问题,甚至可以告诉我为什么这不是我认为应该这样做的(目标是排除某些类型的文件):
find . -type f \( -name "*" ! -name "*\.(vm | jar | class | htm | html | jpg | gif)$" \)
提前致谢。
我不熟悉 find 命令语法,但是要匹配具有给定扩展名的文件,您需要:
".*\.(vm|jar|class|htm|html|jpg|gif)$"
删除空格并在开头添加点。
看起来问题是关于 Unix shell 的......
无论如何,在我更了解的正则表达式方面,我认为您必须删除表达式中的空格:
"\.(vm|jar|class|html?|jpg|gif)$"
我不保证您的命令本身的有效性...
我很确定find默认会查找每个名称,因此这里不需要额外的“ -name "*" ”。
在正则表达式方面,您似乎已经找到了您正在寻找的答案,但您可能仍然想知道find有一个OR标志(-or 或 -o),当正则表达式导致您时,它可以使事情变得更容易烦恼:
find . -type f ! \( -name "*.vm" -o -name "*.jar" -o -name ".class" \)
不利的一面是,显然要写更长的时间……
记得看一下man find。
祝你好运