shell 脚本:将文件排序到目录和子目录中

dev*_*dra 4 shell-script

我经常markdown在这样一个复杂的目录结构中写我的笔记。

~/doc/doc.md
~/doc/math/linearAlgebra/linearAlgebra.md
~/doc/math/linearAlgebra/numericalAnalysis.md
~/doc/linux/tmux/tmux.md
~/doc/linux/newsbeuter/newsbeuter.md
Run Code Online (Sandbox Code Playgroud)

这个目录结构不断扩展,每个目录除了文件之外还有各种其他*.md文件。我有一个递归寻找一个shell脚本markdown files的父目录doc/,生成htmlpdf文件使用pandoc。我还创建了一个doc.md文件(通过脚本),其中包含所有*.md文件的列表。目前我使用,

find ~/doc/**/*.md
Run Code Online (Sandbox Code Playgroud)

生成此列表。我想根据目录结构对它们进行排序,以便像这样阅读:

math
   linearAlgebra
                          linearAlgebra.md
                          numericalAnalysis.md
linux
   tmux
                          tmux.md
   newsbeuter
                          newsbeuter.md
Run Code Online (Sandbox Code Playgroud)

如果fp=/home/user/doc/linux/tmux/tmux.md是文件的完整路径示例,则${${fp%/*.md}#/home/user/doc/}给我linux/tmux. 我可以进一步处理它以隔离linuxtmux等,但我不知道该算法创建的目录结构。我认为这将需要使用数组来存储每个文件的完整目录结构,然后对其进行排序。

如果 shell 脚本已经存在于此,请告诉我。否则,欢迎提供有关可能算法的指针。

Gra*_*eme 8

如果您想要做的只是生成所有.md文件的漂亮格式化输出,则tree应该完全按照您的要求执行:

tree -P '*.md' /home/user/doc
Run Code Online (Sandbox Code Playgroud)

添加-A漂亮的线条,它还可以做一些有趣的事情,比如输出到 HTML/XML。