欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

find 的-regex 与 -name的区别

发布时间:2025/3/15 51 豆豆
生活随笔 收集整理的这篇文章主要介绍了 find 的-regex 与 -name的区别 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1. 与-name, -iname最大的区别就在于 -regex是把find输出的整个结果(有别于绝对路径名)作为要匹配的对象, 而不仅仅是结果的最后一部分

举例:

/tmp目录下有且仅有 aaa, aa, 1, 2 这些文件 find -name "a*"  可以找到aaa和aafind /tmp -regex "a*"就不行, 它一个都找不到, 因为找到的每个结果是这样的 /tmp/aaa /tmp/aa-name 是对结果中的"aaa"和"aa"这个部分进行匹配,  而-regex却是对完整的 "/tmp/aaa"和"/tmp/aa"进行匹配. 所以你要写作find /tmp -regex ".*a.*"

2. 注意上面的是.*而不是*


-name所能解释的是基于shell中file glob的匹配字符, 包括:

(1)*表示任意长度字符串

(2)?表示任意的单个字符

(3)[set] 表示一个可选字符集合

(4)[^set]或[!set]表示以ASCII为全集对[set] 求补集的一个集合

(5)brace expansion, 即把/tmp/{a,b,c}扩展为三个字串

/tmp/a /tmp/b 和/tmp/c


注意 shell的file globing机制往往不被认为是正则表达式.

-regex接受的是"正统"的正则表达式

基本上它跟emacs文档里讲的regex是一样的, 因为find手册里regex的解释部分实际就是链接到emacs 中讲解regex的那个部分. 

在上面例子中最大区别就是.* 来表示任意长度字符串.


举例:

删除/tmp目录中所有数字命名的文件夹

find /tmp -type d -regex ".*/[0-9]*" -exec rm -rf {} \;


本文转自:

https://my.oschina.net/taomac/blog/100248

find用法链接:

http://www.oschina.net/translate/15-practical-unix-linux-find-command-examples-part-2

http://www.oschina.net/translate/15-practical-linux-find-command-examples


转载于:https://blog.51cto.com/qiangsh/1955116

总结

以上是生活随笔为你收集整理的find 的-regex 与 -name的区别的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。