find -maxdepth 0 没有返回任何输出

find -maxdepth 0 没有返回任何输出

我想了解如何使用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命令,文件1被返回。

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

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

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

我的find版本是,

find --version
find (GNU findutils) 4.4.2

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

编辑

当我执行以下命令时,我得到文件1被列出两次。这是打算这样工作吗?

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

答案1

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

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

现在,让我们看看什么文档状态:

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

在上面的第一个示例中,只有目录.列在命令行上。自从.没有名称file1,输出中未列出任何内容。在上面的第二个例子中,两者.和 file1列在命令行上,并且由于file1matches -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

重叠路径

考虑:

$ 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

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

答案2

如果您想在目录中非递归地查找文件(而不是目录),请使用:

find . -maxdepth 1 -type f -name "file1"
# ./file1

-maxdepth 0 不会搜索。它只会尝试匹配您作为参数提供的文件/目录名称find

例如,在上面的语句中,使用,maxdepth的值0将尝试匹配file1.匹配的内容。

然而,传递*而不是与.组合-maxdepth 0将使 bash 替换*为当前目录中的文件列表,这将返回匹配项。

答案3

用法:

John1024 给出了很好的例子,如何使用-maxdepth 0,所以我只添加信息什么时候使用它:

那么,这是什么原因呢-maxdepth 0?如果你知道名字,你可以直接发出命令

ls file-* 

嗯,它可能不是你要搜索的名称。

例子:

touch file-{1..3}
echo "1" > file-1
touch -d @0 file-2

find * -maxdepth 0 -name "file-*" \( -size 1k -o -mtime +10000 \) -ls 
   669266     12 -rw-rw-r--   1 stefan   stefan          2 Mai  4 20:57 file-1
   669270      8 -rw-rw-r--   1 stefan   stefan          0 Jan  1  1970 file-2

我创建了 3 个名为模式文件-* 的文件。然后我在no上添加一些内容。 1、重新设置编号的日期。 2 并留下编号。 3 按原样。

现在,我在大约 1000 个文件中搜索 1k(第一)或年龄 > 大约 30 年的文件。例如,仅在 3 个文件中。

但是 find * 搜索当前目录中的每个文件,因此有点陌生的手册页术语,“起点”,而不仅仅是谈论目录。我猜想 find 强大的过滤功能导致了搜索文件的决定,您知道它们所在的位置($PWD),但您无法使用标准 shell 工具轻松过滤其他属性。

相关内容