为什么在find命令中有点?


14

通常,人们看到如下find命令:

$ find . -name foo.txt

从当前目录开始搜索时。我发现在我的机器(Ubuntu,Cygwin)上,我得到的结果相同而没有点。

为什么通常包含它?是只是一个明确的约定,还是/在某些系统上是必需的?

Answers:


27

的某些版本* find要求您提供path参数,该参数是从其开始搜索的目录。点.简单地表示当前目录通常是您要搜索的位置。

您可以将其替换为要作为搜索基础的任何路径。在某些版本的find中,可以保留该位置,因为如果没有path参数,则隐含当前目录。

您可以man find在shell中运行以获取有关参数的详细信息。例如,我的用法提要表明path参数是可选的(在方括号内[]):

   find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

如果您find不带任何参数的情况下运行my ,则从当前文件夹开始的所有文件和目录都将返回。您的示例只是简单地指出,搜索应从搜索开始,.并将表达式包括-name foo.txt为搜索过滤器之一。

*特别是所有BSD变体以及严格遵循POSIX标准的任何东西。GNU find允许它是可选的。


1
您是否了解现有的find版本需要此内容?或者我可以在哪里进行进一步调查?(很难找到Google)
埃里克·威尔逊

关于默认搜索路径的有趣的事情。
rozcietrzewiacz 2011年

2
我相信大多数BSD find变体都需要path参数,而在GNU find中则是可选参数。可能存在差异。
卡莱布

2
请注意,至少在2008 POSIX标准规范中,pathfind是必需的参数
卡莱布

1
Nit选择:“可以用所需的任何路径替换此[点]”→“所需的任何路径 ”,因为您可以说find dir1 dir2 dir3 -name foo.txt
G-Man说'Resstate Monica''Nov

5

例如,find的AIX版本需要该路径,并且如果未提供该路径,则该路径将不会运行。

# oslevel -s
5300-08-03-0831
# find -name bob
Usage: find [-H | -L] Path-list [Expression-list]

# oslevel -s
6100-03-01-0921
# find -name bob
Usage: find [-H | -L] Path-list [Expression-list]

尽管某些AIX机器可能安装了GNU查找,但是可以解决该问题,但是,

# oslevel -s
6100-03-01-0921
# /opt/freeware/bin/find -version
GNU find version 4.1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.