Regex 从查找中排除文件类型的正则表达式

Regex 从查找中排除文件类型的正则表达式,regex,linux,unix,find,Regex,Linux,Unix,Find,在linux中使用find命令时,可以添加一个-regex标志,该标志使用emacs RegalR表达式进行匹配 我想查找除.jar文件和.ear文件之外的所有文件。在这种情况下,正则表达式是什么 谢谢编辑:新方法: 由于POSIX正则表达式不支持查找,因此需要否定匹配结果: find . -not -regex ".*\.[je]ar" 之前发布的答案使用了lookback,因此在这里不起作用,但为了完整起见: .*(?<!\.[je]ar)$ *(?此处不需要正则表达式。您可以将查

在linux中使用
find
命令时,可以添加一个
-regex
标志,该标志使用emacs RegalR表达式进行匹配

我想查找除
.jar
文件和
.ear
文件之外的所有文件。在这种情况下,正则表达式是什么

谢谢编辑:新方法:

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

find . -not -regex ".*\.[je]ar"
之前发布的答案使用了lookback,因此在这里不起作用,但为了完整起见:

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

*(?此处不需要正则表达式。您可以将
查找
-name
-not
选项一起使用:

find . -not -name "*.jar" -not -name "*.ear"
上述内容更简洁(但可读性较差)的版本是:

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

在这种情况下使用正则表达式听起来有点过分(您可以检查名称是否以某物结尾)。我不确定emacs语法,但类似的东西应该足够通用:

\.(?!((jar$)|(ear$)))
i、 e.找到一个点(.)而不是结尾($)“jar”或(|)ear


这将完成任务,我个人觉得它比其他一些解决方案更清晰。不幸的是,需要-regextype(将一个简单的命令弄乱)才能使捕获组工作。

如果文件名不包含点或多个点怎么办?(除了
-regex
选项匹配整个文件名,而不仅仅是部分文件名之外)我同意,regex可能有些过分。你是对的,但我正试图使它尽可能通用,因为我将它作为一个函数使用,不知道最终用户的需求是什么。包括大多数文件,但一些文件似乎可能具有复合条件
('-not-regex'most_EXCLUDE'-或-regex'some_INCLUDE')“
。-o prefix是否代表”或“组合这两种文件类型?它可以用于任何其他bash命令中吗?似乎无法在命令中使用它。我使用的是
find.-type'f'-regextype posix extended-regex'*(?听起来你需要将
regextype
选项放在
regex
选项之后。但是
posix extended
听起来不正确;posix没有lookaround AFAIK.Oops。看起来
find
只支持posix BRE/ERE引擎。在这种情况下,此解决方案根本不起作用。对此表示抱歉(谁投票支持这个?)。它说有效的类型有
findutils default'、
awk'、
egrep'、
emacs'、
gnu awk'、
grep'、
posixawk'、
posixegrep'、
posixextended'。我同意regex没有滥杀,而且可以快速扩展。
find . -regextype posix-extended -not -regex ".*\\.(jar|ear)"