find 的-regex怎么用,用它怎么一直没有反映

本文详细阐述了Linux find命令中-name和-regex参数的使用方式及其区别,通过实例展示了两者在查找特定文件时的表现差异,并深入解析了两者背后的原理,帮助读者更好地理解和运用find命令进行文件查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 与
-name, -iname最大的区别就在于 -regex是把find输出的整个结果(有别于绝对路径名)作为要匹配的对象, 而不仅仅是结果的最后一部分, 举例
/tmp
目录下有且仅有 aaa, aa, 1, 2 这些文件
find -name "a*"可以找到
aaa和aa

find /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的那个部分. 在上面例子中最大区别就是
.* 来表示任意长度字符串.

 

原文见:http://bbs.chinaunix.net/thread-612012-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值