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

发布于 2024-11-25 03:49:55 字数 192 浏览 1 评论 0原文

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

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

谢谢

When using find command in linux, one can add a -regex flag that uses emacs regualr expressions to match.

I want find to look for all files except .jar files and .ear files. what would be the regular expression in this case?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

暮色兮凉城 2024-12-02 03:49:55

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

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

上面的更简洁(但可读性较差)的版本是:

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

You don't need a regex here. You can use find with the -name and -not options:

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

A more concise (but less readable) version of the above is:

find . ! \( -name "*.jar" -o -name "*.ear" \)
野生奥特曼 2024-12-02 03:49:55

编辑:新方法:

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

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

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

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

EDIT: New approach:

Since POSIX regexes don't support lookaround, you need to negate the match result:

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

The previously posted answer uses lookbehind and thus won't work here, but here it is for completeness' sake:

.*(?<!\.[je]ar)$
没企图 2024-12-02 03:49:55
find . -regextype posix-extended -not -regex ".*\\.(jar|ear)"

这可以完成工作,而且我个人发现它比其他一些解决方案更清晰一些。不幸的是,需要 -regextype (使原本简单的命令变得混乱)才能使捕获组正常工作。

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

This will do the job, and I personally find it a bit clearer than some of the other solutions. Unfortunately the -regextype is required (cluttering up an otherwise simple command) to make the capturing group work.

小巷里的女流氓 2024-12-02 03:49:55

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

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

即找到一个点(.),后面不跟着结尾($)“jar”或(|)“ear”。

Using a regular expression in this case sounds like an overkill (you could just check if the name ends with something). I'm not sure about emacs syntax, but something like this should be generic enough to work:

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

i.e. find a dot (.) not followed by ending ($) "jar" or (|) "ear".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文