具有如下文件结构:
/root/abc/1.txt
/root/abc/2.txt
并坐在/root
目录中。
1.)为什么命令没有:
查找。-路径“abc/*.txt”
未返回任何结果
查找.-path“./abc/*.txt”
和
查找。-path“*/abc/*.txt”
做作品吗?
find . -path "./abc/*.txt"
2.)和有什么区别find . -path "*/abc/*.txt"
答案1
问题 1:
该-path pattern
参数与整个文件名匹配。
$ find
.
./abc
./abc/1.txt
./abc/2.txt
abc/*.txt
如果没有前导 ,模式就不匹配./
。
问题2:
通配符可以匹配任意长度(包括和字符)*
的任意字符串。该参数 有两个通配符,因此可以匹配以下任意内容:/
.
-path "*/abc/*.txt"
./abc/a.txt
* *
./abc/ANYTHING.txt
* ********
def/ghi/abc/SOMETHING.txt
******* *********
./abc/def_dsa/faf.txt
* ***********
答案2
下面这句话出自手册-path
里的选项find
:
请注意,模式匹配测试适用于整个文件名,从命令行上命名的起点之一开始。
这解释了为什么您的替代搜索模式("./abc/*.txt"
和"*/abc/*.txt"
)有效。您的原始搜索模式("abc/*.txt"
)仅在搜索根为以下情况时才有效abc
:
find abc/ -path "abc/*.txt"
至于"./abc/*.txt"
和之间的区别"*/abc/*.txt"
,在调用之前,它们都不会尝试扩展字符串find
:第一个只会在顶级目录中查找文件./abc/
,但第二个会在 中查找文件任何子目录abc
,例如./def/abc/
、、./ghi/def/abc/
等等,以及./abc/
。