![为什么当路径为 . 和 ./* 时 find 命令的结果会不同?](https://linux22.com/image/1175871/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%BD%93%E8%B7%AF%E5%BE%84%E4%B8%BA%20.%20%E5%92%8C%20.%2F*%20%E6%97%B6%20find%20%E5%91%BD%E4%BB%A4%E7%9A%84%E7%BB%93%E6%9E%9C%E4%BC%9A%E4%B8%8D%E5%90%8C%EF%BC%9F.png)
当我输入时,find . -name "so*"
我得到了以下所有结果:
./sort
./.cache/evolution/sources
./.config/evolution/sources
./.local/share/sounds
但是当我打字时find ./* -name "so*"
我只得到./sort
。
据我所知,当我.
在命令中使用时,我要求在当前目录中查找以“so”开头的文件,但是当我使用./*
它时,它只显示./sort
文件而不显示隐藏文件,所以我想知道添加/*
实际上做了什么以及它如何改变我的查询/指令。
答案1
find .
表示从当前目录开始搜索。
find ./*
表示在当前目录中搜索与*
。
但是,*
shell 会对其进行扩展,因此它find
会认为您确实输入了如下命令:
find ./sort ./another-dir ./another-file ./etc -name "so*"
您的观察是正确的。默认情况下,前导*
会排除以 开头的文件或目录.
,因此它们永远不会被 看到find
。这不仅是隐藏文件,还包括当前目录和父目录,因此.*
通常不是一个好主意!