unix - GNU 找到 : Search in current directory first

标签 unix directory find depth directory-traversal

如何让 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. 如果当前条目是目录,则以未指定的顺序对该目录中的每个条目执行步骤 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/

相关文章:

regex - 如何在 find 命令下使用正则表达式

unix - jboss.bind.address 的重要性是什么

linux - APUE2中的一个困惑(关于UNIX中的symbolic link)

php - php 如何统计文件夹中的文件数

linux - 如何在Linux中按用户获取所有文件和目录

arrays - 测试数组是否在 lisp 中的列表中

c - 中断服务程序中发生了什么?

java - 如何从现有的 Unix 服务器连接连接到 FTP 服务器?

linux - 如何从 Linux 上的文件夹同步最后修改的文件

batch-file - 标签循环崩溃似乎没有原因