查找所有目录中同名的子目录

查找所有目录中同名的子目录

我想要运行一个命令来:

  1. 查找inc文件夹“ ”下所有名为“ ”的目录X
  2. 列出每个“ ”下的所有子目录X/.../inc/
  3. 将输出重定向到名为“ list”的文件

我尝试了以下命令的各种组合,但没有成功:

$ find X/ -name "inc" -print | xargs find {} -type d > list
find: path must precede expression

我怎样才能做到这一点?

答案1

find可以自己完成这一切:

find X -path '*/inc/*' -type d > list

阅读-path部分内容man find以了解更多信息。

正如我在评论中快速提到的那样:如果你将目录以行分隔存储在文本文件中,则包含换行符的目录名称将无法明确表示。如果你肯定目录不包含换行符,没关系。这只是一般性评论。

答案2

这是一个方便的单行代码:

find X -type d -name "inc" -exec sh -c 'find {} -type d' \; > list

find针对每个第一个find结果运行。该exec选项还可以采用最小的 shell 命令,其中 — — 正如我所说 — —{}被替换为第一个的每个目录find

第二个命令find将按照您的要求“列出第一个结果的所有子目录”,包括目录inc。如果您不希望该目录本身出现在输出中,请让第二个命令find 至少深度为 1 的输出文件夹。

find X -type d -name "inc" -exec sh -c 'find {} -mindepth 1 -type d' \; > list

然后我们只需将命令重定向stdoutlist

答案3

好吧,我已经找到了模拟此嵌套查找的答案:

find X/ -type d | grep "/inc/" > list

答案4

尝试这个:

   find path-of-x -path '*/inc/*' -type d > list

相关内容