我想运行该命令并使用带有符号插入符号的命令选项find
获取桌面目录中的某些文件/目录regex
^
如您所知,插入^
符号匹配行的开头,我想获取以字母开头的所有文件/目录t
;我使用了以下命令find . -regex "^./t"
,但事实证明,它只会匹配名称为简单t的文件/文件夹!
我知道正则表达式whole path
不仅会匹配 ,还会匹配file name
。但是为什么所有这些都不匹配,因为它们以 开头./t
。
./tcpdump.txt
./t.txt
./test.sh
./trade.txt
./torbrowser.desktop
./token.txt
PS:这个正则表达式对我有用,^./t.*
但仍然无法理解原始命令中插入符号的行为
正则表达式始终匹配整个路径这一事实意味着插入符号和美元符号是多余的:整个路径必须匹配,而不仅仅是其子字符串。或者,您可以始终想象正则表达式以插入符号开头并以美元符号结尾,即使您不输入它们。
该
-regex
选项要求模式与整个路径匹配。请参阅man find
:在这种情况下,插入符号是没有意义的,因为如上所述,
-regex
必须匹配所有内容,因此本质上,^
和$
是隐含的。您给出了它的
^./t
意思是“查找任何字符”(请记住,.
在正则表达式中表示“任何字符”,而不是文字.
),后跟一个/
,然后是单个字母t
,没有其他。这里需要的是
-name
操作数,它接受 glob 而不是正则表达式,并且只匹配文件的名称,而不是整个路径。因此,要查找名称以 开头的所有文件/目录t
,请使用:glob的
t*
意思是“t 后面跟着 0 个或多个字符”。如果你真的想用 来做这件事-regex
,尽管这只会使事情变得更加复杂,你需要指定允许在 后面出现任何内容t
,如下所示:该正则表达式的意思是“匹配尽可能多的字符(包括 0),直到最后一个字符
/
,然后后面t
跟着任何其他字符。