我试图了解如何使用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
.