宽度优先列表很重要,在这里。此外,限制搜索的深度也不错。
$ 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
这样的繁重工具。
它的工作方式:
如果您想使用标准工具来执行此操作,则以下管道应该起作用:
find . -type d | perl -lne 'print tr:/::, " $_"' | sort -n | cut -d' ' -f2
即,
要限制找到的深度,请将-maxdepth参数添加到find命令。
如果要以相同的顺序列出目录以找到它们,请使用“ sort -n -s”代替“ sort -n”; “ -s”标志可稳定排序(即,在比较比较的项目之间保留输入顺序)。
您可以使用find命令,查找/ path / to / dir -type d因此,下面是当前目录中的目录列表示例:
我认为您无法使用内置实用程序来完成此操作,因为遍历目录层次结构时,您几乎总是需要深度优先搜索,无论是自上而下还是自下而上。这是一个Python脚本,它将为您提供广度优先的搜索:
我的感觉是,这是比前面提到的解决方案更好的解决方案。它涉及grep等和一个循环,但我发现它工作得很好,特别是在您希望行缓冲而不是整个查找缓冲的情况下。
我试图找到一种方法来使用find
执行此操作,但似乎没有-breadth
选项。如果没有为此编写补丁,请尝试以下shell咒语(适用于bash):
没有应有的顺序:找到-maxdepth -type d
这是使用查找的一种可能方法。我尚未对其进行彻底的测试,因此请用户注意...
类似这样的东西: