我想了解如何使用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
列在命令行上,并且由于file1
matches -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 工具轻松过滤其他属性。