在这里,广度优先列表很重要。此外,限制搜索的深度会很好。
$ find . -type d
/foo
/foo/subfoo
/foo/subfoo/subsub
/foo/subfoo/subsub/subsubsub
/bar
/bar/subbar
$ find . -type d -depth
/foo/subfoo/subsub/subsubsub
/foo/subfoo/subsub
/foo/subfoo
/foo
/bar/subbar
/bar
$ < what goes here? >
/foo
/bar
/foo/subfoo
/bar/subbar
/foo/subfoo/subsub
/foo/subfoo/subsub/subsubsub
如果可能的话,我想使用 bash 单行来执行此操作。如果有一个 javascript-shell,我会想象类似的东西
bash("find . -type d").sort( function (x) x.findall(/\//g).length; )
最佳答案
find
命令支持识别大量占位符的-printf
选项。
一个这样的占位符是 %d
,它呈现给定路径的深度,相对于 find
开始的位置。
因此您可以使用以下简单的单线:
find -type d -printf '%d\t%P\n' | sort -r -nk1 | cut -f2-
它非常简单,不依赖于像 perl
这样的繁重工具。
它是如何工作的:
https://stackoverflow.com/questions/539583/