我有一个名为a的文件夹,它可能有一个或多个子目录,子目录可能有多个子目录,依此类推。我想知道如何编写shell脚本来列出包含具有特定扩展名的文件的所有子目录。
所以,它可能就像
A -> B -> C
-> D -> f2.txt
-> F -> f3.txt
-> E -> G -> H -> f4.txt
因此只列出D,F和H目录。实际上我需要通过列出它们的目录树来快速查找特定java类的包名。例如,在前面的示例中,A.E.G.H是与A.D相同的包,但A.E.G不是包,因为G只包含子目录H没有文件。
答案 0 :(得分:3)
我认为你需要find
命令。你可以这样使用,
find . -name '*.txt'
下面,
.
- dot(.
)是当前目录。您还可以指定开始的路径。
-name
- 要查找的文件名。
您还可以使用-maxdepth
选项来限制递归查找的深度。通常,find
会递归地找到该文件。
<强>更新强>
如果要列出目录,
find . -name '*.txt' -exec dirname {} \;
答案 1 :(得分:1)
find . -name '*.txt' -printf '%h\n'
man find
会为-printf
答案 2 :(得分:0)
MAC等系统的更简单,更快速的替代方案。无需使用其他2个工具,甚至可以重复调用dirname
:
find -type f -name '*.txt' | awk 'BEGIN{FS=OFS="/"}{--NF}!a[$0]++'
-type f
如果不起作用,可以选择删除。