为什么 find 命令中的点?

为什么 find 命令中的点?

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

$ find . -name foo.txt

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

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

答案1

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

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

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

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

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

* 值得注意的是所有BSD 变体以及任何严格遵守的事情POSIX 标准GNU 查找允许它是可选的。

答案2

例如,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]

尽管某些 AIX 机器可能安装了 GNU find,它可以在没有路径的情况下应对,

# oslevel -s
6100-03-01-0921
# /opt/freeware/bin/find -version
GNU find version 4.1

相关内容