找到-maxdepth 0不返回任何输出


17

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

我有以下目录结构。

--> file1
--> parent
          --> child1
                   --> file1
                   --> file2
          --> child2
                   --> file1
                   --> file2
          --> file1

现在,我执行find以下命令。

find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"

如果没有上述find命令,则返回file1

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

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

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

我的find版本是

find --version
find (GNU findutils) 4.4.2

有人可以为我提供一些关于哪种情况下-maxdepth 0有用的建议吗?

编辑

当我执行以下命令时,我得到file1两次列出。是否打算以此方式工作?

find . file1 -maxdepth 1 -name "file1"
./file1
file1

Answers:


24

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

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1

现在,让我们看一下文档说明:

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

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

换句话说,-maxdepth 0意味着搜索目录或子目录。而是仅在命令行上显式列出的文件中查找匹配的文件。

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

通常,可以在命令行上命名许多文件和目录。例如,在这里我们尝试find在命令行上使用包含11个文件和目录的命令:

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -maxdepth 0 -name "file1"
file1

重叠路径

考虑:

$ 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

显然,正如Ramesh所指出的那样,find它将遵循命令行上指定的每个路径,并寻找匹配项,即使这些路径导致相同的文件(如中),. file或者即使这些路径是完全相同的(如中)file1 file1


谢谢。但是如何在命令行中传递一些文件名?
拉梅什

好点子。看到我更新的答案。您可以在第一次测试前随意放置任意数量。例如:find * -maxdepth 0 -name "file1"。该*会列出在命令行上当前目录下的所有文件。
John1024

1
我希望再次更新@Ramesh答案,并提供更好的解释和示例。
John1024

再次感谢。我用最新更新中的更多详细信息更新了我的问题。
拉梅什2014年

@Ramesh我找不到它的记录,但是我看到的是与您相同的行为:find在命令行上查看每个路径,并报告每个匹配项,即使它们是重复的。
John1024
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.