如何让 find 先在当前文件夹中查找,然后在子文件夹中继续搜索?我有以下内容:
$ find . -iname '.note'
folder/1/.note
folder/2/.note
folder/3/.note
folder/.note
我想要的是:
$ find . -iname '.note'
folder/.note
folder/1/.note
folder/2/.note
folder/3/.note
有什么想法吗?
最佳答案
find
的算法如下:
- 对于命令行中给出的每个路径,让当前条目成为该路径,然后:
- 将当前条目与表达式匹配。
- 如果当前条目是目录,则以未指定的顺序对该目录中的每个条目执行步骤 1 和 2。
对于 -depth
primary,步骤 1 和 2 以相反的顺序执行。
您要求 find
做的是在第 2 步中先考虑文件再考虑目录。但是 find
没有这样做的选项。
在您的示例中,所有匹配文件的名称都出现在同一目录中子目录的名称之前,因此 find . -iname '.note' |排序
会起作用。但这显然不能很好地概括。
在目录之前处理非目录的一种方法是运行 find
命令来遍历目录,并运行一个单独的命令(可能再次是 find
)来打印匹配的文件在该目录中。
find -type d -exec print-matching-files-in {} \;
如果您想使用find
表达式来匹配文件,这里是第二个find
命令的一般结构,它只遍历指定目录中的非目录,非递归(需要 GNU find):
find -type d -exec find {} -maxdepth 1 \! -type d … \;
例如:
find -type d -exec find {} -maxdepth 1 \! -type d -iname '.note' \;
在zsh中,可以这样写
print -l **/(#i).note(Od)
**/
递归到子目录; (#i)
(a globbing flag) 将后面的内容解释为不区分大小写的模式,(Od)
(a glob qualifier) 对递归遍历的结果进行排序以便在子目录之前考虑目录中的文件。使用 (Odon)
,输出在 Od
规定的约束内按字典顺序排序(即主要排序标准排在第一位)。
关于unix - GNU 找到 : Search in current directory first,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4214992/