find -maxdepth 0 不给我任何输出

Ram*_*esh 26 find

我试图了解如何使用find -maxdepth 0选项。

我有以下目录结构。

--> file1
--> parent
          --> child1
                   --> file1
                   --> file2
          --> child2
                   --> file1
                   --> file2
          --> file1
Run Code Online (Sandbox Code Playgroud)

现在,我执行我的find命令如下。

find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"
Run Code Online (Sandbox Code Playgroud)

没有上述find命令,file1被返回。

从 的手册页find,我看到以下信息。

-maxdepth 0 表示仅将测试和操作应用于命令行参数。

我搜索了一些带有-maxdepth 0选项的示例,但找不到任何合适的示例。

我的find版本是

find --version
find (GNU findutils) 4.4.2
Run Code Online (Sandbox Code Playgroud)

有人可以向我提供一些关于哪些案例-maxdepth 0选项有用的指示吗?

编辑

当我执行以下命令时,我将file1列出两次。这是打算以这种方式工作吗?

find . file1 -maxdepth 1 -name "file1"
./file1
file1
Run Code Online (Sandbox Code Playgroud)

Joh*_*024 32

让我们假设我们file1在当前目录中有。然后:

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1
Run Code Online (Sandbox Code Playgroud)

现在,让我们看看文档说明了什么:

-maxdepth 0 意味着仅将测试和操作应用于命令行参数。

在我上面的第一个示例中,.命令行中只列出了目录。由于.没有 name file1,输出中没有列出任何内容。在我上面的第二个示例中,.和 file1都列在命令行中,并且由于file1匹配-name "file1",它在输出中返回。

换句话说,-maxdepth 0意味着搜索目录或子目录。相反,只在命令行上明确列出的文件中查找匹配的文件。

在您的示例中,命令行中仅列出了目录,并且没有一个目录被命名为file1. 因此,没有输出。

一般来说,很多文件和目录都可以在命令行上命名。例如,这里我们find在命令行上尝试使用九个文件和目录的命令:

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 -maxdepth 0 -name "file1"
file1
Run Code Online (Sandbox Code Playgroud)

重叠路径

考虑:

$ find . file1 -maxdepth 0 -iname file1
file1
$ find . file1 file1 -maxdepth 0 -iname file1
file1
file1
$ find . file1 file1 -maxdepth 1 -iname file1
./file1
file1
file1
Run Code Online (Sandbox Code Playgroud)

find将遵循命令行上指定的每个路径并查找匹配项,即使这些路径指向相同的文件(如 ). file,或者即使路径完全重复(如file1 file1.