linux - 如何递归列出某个位置的所有目录,广度优先?

在这里,广度优先列表很重要。此外,限制搜索的深度会很好。

$ 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/

相关文章:

json - Go 中带有 JSON Marshal 的小写 JSON 键名

c - 我应该调用什么 API 来获得系统正常运行时间?

.net - 如何在 ASP.NET MVC 中将 View 模型转换为 JSON 对象?

linux - 如何在 Ubuntu 上安装 chkconfig?

c - 是否有用于检查 Linux 内核版本的宏定义?

linux - 如何使用 echo 编写非 ASCII 字符?

regex - sed 将线条连接在一起

linux - BASH中多列文件的反向排序顺序

linux - 将node.js + expressjs应用程序的NODE_ENV设置为ubuntu

json - 将 JSON 文件中的数据导入 R