为什么 find 命令中的点?

Eri*_*son 14 find

通常,人们会看到如下所示的find命令:

$ find . -name foo.txt
Run Code Online (Sandbox Code Playgroud)

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

为什么通常包括在内?它只是一个明确的约定,还是某些系统需要它?

Cal*_*leb 27

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

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

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

   find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
Run Code Online (Sandbox Code Playgroud)

如果您find完全不带任何参数运行 my ,将从当前文件夹开始的所有文件和目录都将被返回。您的示例只是明确指出搜索应该从.表达式开始并将其包含-name foo.txt为搜索过滤器之一。

* 值得注意的是所有BSD 变体和任何严格遵守POSIX 标准的东西GNU find允许它是可选的。

  • Nit pick:“你可以用你想要的任何路径替换这个[点]”→“你想要的任何***路径***”,因为你可以说“find dir1 dir2 dir3 -name foo.txt”。 (3认同)
  • 我相信大多数 [BSD find](http://www.freebsd.org/cgi/man.cgi?query=find&apropos=0&sektion=0&manpath=FreeBSD+8.2-RELEASE&format=html) 变体在 [GNU find ](http://unixhelp.ed.ac.uk/CGI/man-cgi?find) 它是可选的。可能存在变化。 (2认同)
  • 请注意,至少在 2008 POSIX 标准规范中,[`path` 是 find 的必需参数](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html)。 (2认同)

Eig*_*ony 5

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

# 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]
Run Code Online (Sandbox Code Playgroud)

虽然一些 AIX 机器可能安装了 GNU find,它可以在没有路径的情况下处理,

# oslevel -s
6100-03-01-0921
# /opt/freeware/bin/find -version
GNU find version 4.1
Run Code Online (Sandbox Code Playgroud)