我想要运行一个命令来:
- 查找
inc
文件夹“ ”下所有名为“ ”的目录X
。 - 列出每个“ ”下的所有子目录
X/.../inc/
。 - 将输出重定向到名为“
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
然后我们只需将命令重定向stdout
到list
。
答案3
好吧,我已经找到了模拟此嵌套查找的答案:
find X/ -type d | grep "/inc/" > list
答案4
尝试这个:
find path-of-x -path '*/inc/*' -type d > list