正则表达式从find中排除文件类型

时间:2011-07-19 09:59:54

标签: regex linux unix find

在linux中使用find命令时,可以添加一个使用emacs regualr表达式匹配的-regex标志。

我希望找到除.jar个文件和.ear文件以外的所有文件。在这种情况下,正则表达式是什么?

由于

4 个答案:

答案 0 :(得分:36)

这里不需要正则表达式。您可以将find-name-not选项一起使用:

find . -not -name "*.jar" -not -name "*.ear"

上述更简洁(但不太可读)的版本是:

find . ! \( -name "*.jar" -o -name "*.ear" \)

答案 1 :(得分:13)

编辑:新方法:

由于POSIX正则表达式不支持环视,因此您需要否定匹配结果:

find . -not -regex ".*\.[je]ar"

之前发布的答案使用了lookbehind,因此在这里不起作用,但这里是为了完整性:

.*(?<!\.[je]ar)$

答案 2 :(得分:5)

find . -regextype posix-extended -not -regex ".*\\.(jar|ear)"

这将完成这项工作,我个人认为它比其他一些解决方案更清晰。不幸的是,-regextype是必需的(混乱了一个简单的命令)以使捕获组工作。

答案 3 :(得分:0)

在这种情况下使用正则表达式听起来像是一种过度杀戮(你可以检查名称是否以某些东西结束)。我不确定emacs的语法,但是这样的东西应该足够通用才能工作:

\.(?!((jar$)|(ear$)))

即。找到一个点(。)后面没有结束($)“jar”或(|)“ear”。