从查找中排除文件类型的正则表达式
在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这里不需要正则表达式。您可以将
find
与-name
和-not
选项一起使用:上面的更简洁(但可读性较差)的版本是:
You don't need a regex here. You can use
find
with the-name
and-not
options:A more concise (but less readable) version of the above is:
编辑:新方法:
由于 POSIX 正则表达式不支持环视,因此您需要否定匹配结果:
之前发布的答案使用lookbehind,因此在这里不起作用,但这里是为了完整性:
EDIT: New approach:
Since POSIX regexes don't support lookaround, you need to negate the match result:
The previously posted answer uses lookbehind and thus won't work here, but here it is for completeness' sake:
这可以完成工作,而且我个人发现它比其他一些解决方案更清晰一些。不幸的是,需要 -regextype (使原本简单的命令变得混乱)才能使捕获组正常工作。
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.
在这种情况下使用正则表达式听起来有点大材小用(您可以只检查名称是否以某些内容结尾)。我不确定 emacs 语法,但类似这样的东西应该足够通用:
即找到一个点(.),后面不跟着结尾($)“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:
i.e. find a dot (.) not followed by ending ($) "jar" or (|) "ear".