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

Mic*_*ael 20 regex unix linux find

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

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

谢谢

dog*_*ane 37

你这里不需要正则表达式.您可以使用find-name-not选项:

find . -not -name "*.jar" -not -name "*.ear"
Run Code Online (Sandbox Code Playgroud)

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

find . ! \( -name "*.jar" -o -name "*.ear" \)
Run Code Online (Sandbox Code Playgroud)


Tim*_*ker 13

编辑:新方法:

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

find . -not -regex ".*\.[je]ar"
Run Code Online (Sandbox Code Playgroud)

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

.*(?<!\.[je]ar)$
Run Code Online (Sandbox Code Playgroud)


use*_*788 6

find . -regextype posix-extended -not -regex ".*\\.(jar|ear)"
Run Code Online (Sandbox Code Playgroud)

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