有没有办法在Github README.md中表示目录树?


79

在我的Githubs回购文档中,我想表示一个目录树结构,如下所示:

在此处输入图片说明

除了仅使用ascii艺术进行创作之外,还有其他方法可以使用Github风味的markdown来做到这一点吗?

所以基本上像这个问题,但我想知道是否有github特定的解决方案。


2
如果您使用的是Atom编辑器,则可以使用此软件包轻松编写ASCII树:ascii-tree
Ramtin Soltani

刚刚出于相同目的创建了一个项目。它是python3脚本。github.com/prncvrm/Project-Structure访问,进行尝试并提出问题或分叉。
王子

Answers:


30

不直接,不。您必须手动创建它并放入您自己。假设您在本地使用* nix框,并且在使用utf,则tree会很好地生成它(我相信这就是您在上面使用的示例所生成的)。

假设您将sreadme.md作为文档目标,那么我认为唯一可以自动化的方法是运行git pre-commit钩子tree并将其嵌入到自述文件中。您需要进行比较以确保仅在输出更改时才更新自述文件。

Otoh如果您要通过github页面维护单独的文档,那么您可以做的是切换到在本地使用jekyll(或其他生成器)并自己推送静态页面。然后,您可以将所需的更改作为插件/ shell脚本* /手动更改(如果它们之间的差异不大)或使用与上述相同的方法来实现。

*如果将其集成到提交挂钩中,则可以避免添加任何其他步骤来更改页面。


1
感谢您的回答,但这不是我的意思。我的意思是问是否有一种方法可以在您的自述文件中(如带有嵌套等)表示目录树而不生成它。为了清楚起见,我已经编辑了问题。

与之类的链接一样,如果没有index.html,您将在apache中获得排序?
奥利弗·马修斯

不,我的意思是说,如果有一种简便的方法可以生成这样的内容:imgur.com/OHfWdLk在您的自述文件中。

3
在Mac上,您可以tree使用Homebrew安装命令,即brew install tree。然后从我想代表的目录中运行tree . >> tree.txt,然后复制并编辑README.md文件中的文本。确实满足了我的需求!
morphatic

1
为什么接受这个答案?有许多好的实用程序可以做到这一点。请不要执行本手册。看看这个。 github.com/michalbe/md-file-tree
nagendra547 '19

110

我以这种方式解决了问题:

  1. tree在bash中插入命令。

在此处输入图片说明

  1. 在github仓库中创建README.md并复制bash结果
  2. 在markdown代码中插入.md文件

在此处输入图片说明 4.看到输出并感到高兴=) 在此处输入图片说明


1
这是您可以复制的示例,我在github
Pietro Nadalini,

1
请注意,在某些情况下,使用“`''bash ...```”会突出显示某些单词。相反,您可以使用“ pre”标签:“ <pre> ... </ pre>”。
Liran Funaro

37

我写了一个小技巧来达到目的:

#!/bin/bash

#File: tree-md

tree=$(tree -tf --noreport -I '*~' --charset ascii $1 |
       sed -e 's/| \+/  /g' -e 's/[|`]-\+/ */g' -e 's:\(* \)\(\(.*/\)\([^/]\+\)\):\1[\4](\2):g')

printf "# Project tree\n\n${tree}"

例:

原始树命令:

$ tree
.
├── dir1
│   ├── file11.ext
│   └── file12.ext
├── dir2
│   ├── file21.ext
│   ├── file22.ext
│   └── file23.ext
├── dir3
├── file_in_root.ext
└── README.md

3 directories, 7 files

Markdown树命令:

$ ./tree-md .
# Project tree

.
 * [tree-md](./tree-md)
 * [dir2](./dir2)
   * [file21.ext](./dir2/file21.ext)
   * [file22.ext](./dir2/file22.ext)
   * [file23.ext](./dir2/file23.ext)
 * [dir1](./dir1)
   * [file11.ext](./dir1/file11.ext)
   * [file12.ext](./dir1/file12.ext)
 * [file_in_root.ext](./file_in_root.ext)
 * [README.md](./README.md)
 * [dir3](./dir3)

渲染结果:

(链接在Stackoverflow中不可见...)

项目树
  • 树md
  • 目录2
    • file21.ext
    • file22.ext
    • file23.ext
  • 目录1
    • file11.ext
    • file12.ext
  • file_in_root.ext
  • 自述文件
  • 目录3

真是个好主意!保持几分钟的时间,现在我可以轻松更新自述目录。谢谢!您是否想使其更具可配置性?
berezovskyi 2016-10-26

1
另外,通过@michalbe github.com/michalbe/md-file-tree
mikequentel

有没有办法限制树的深度?
Sami-L

这不适用于Mac。!我使用brew install树来安装树。
nagendra547

杜德(Dude),这
真是太

15

我制作了一个节点模块来自动执行此任务:mddir

用法

节点mddir“ ../relative/path/”

要安装:npm install mddir -g

生成当前目录的markdown:mddir

要生成任何绝对路径:mddir / absolute / path

生成相对路径:mddir〜/ Documents / whatever。

md文件在您的工作目录中生成。

当前忽略node_modules和.git文件夹。

故障排除

如果收到错误“ node \ r:没有这样的文件或目录”,则问题是您的操作系统使用不同的行尾,并且如果您未将行尾样式显式设置为Unix,则mddir无法解析它们。这通常会影响Windows,但也会影响Linux的某些版本。必须在mddir npm全局bin文件夹中将行尾设置为Unix样式。

行尾修复

使用以下命令获取npm bin文件夹路径:

npm config get prefix

将CD放入该文件夹

brew安装dos2unix

dos2unix lib / node_modules / mddir / src / mddir.js

这会将行尾转换为Unix而不是Dos

然后正常运行:node mddir“ ../relative/path/”。

示例生成的markdown文件结构“ directoryList.md”

    |-- .bowerrc
    |-- .jshintrc
    |-- .jshintrc2
    |-- Gruntfile.js
    |-- README.md
    |-- bower.json
    |-- karma.conf.js
    |-- package.json
    |-- app
        |-- app.js
        |-- db.js
        |-- directoryList.md
        |-- index.html
        |-- mddir.js
        |-- routing.js
        |-- server.js
        |-- _api
            |-- api.groups.js
            |-- api.posts.js
            |-- api.users.js
            |-- api.widgets.js
        |-- _components
            |-- directives
                |-- directives.module.js
                |-- vendor
                    |-- directive.draganddrop.js
            |-- helpers
                |-- helpers.module.js
                |-- proprietary
                    |-- factory.actionDispatcher.js
            |-- services
                |-- services.cardTemplates.js
                |-- services.cards.js
                |-- services.groups.js
                |-- services.posts.js
                |-- services.users.js
                |-- services.widgets.js
        |-- _mocks
            |-- mocks.groups.js
            |-- mocks.posts.js
            |-- mocks.users.js
            |-- mocks.widgets.js

感谢您的节点包。几个注释1)可以选择以文本形式而不是JSON形式获取输出。我必须进一步解析JSON输出,然后才能将其粘贴到markdown中。2)有没有一种方法可以使您不必从node_modules/mddir/src/目录运行它?例如,我想node ~./src > dir-struct.txt从我的项目目录运行,并将dir-struct.txt的内容直接粘贴到我的markdown中。
wilblack



3

您也可以检查此树扩展包。通过使用节点> = 6.x,可以将其用作命令行应用程序。

tree与树非常相似,但也可以选择在树中配置最大深度,这是它的可怕事情之一。您也可以使用.gitignore文件进行过滤。

在此处输入图片说明


1
谨记给他人:要将此类内容转换为降价,只需添加三个反引号即可。
user45254'9

3

上述解决方案都无法在我的Mac上完全为我工作。

我发现这是最好的解决方案是使用此处创建的实用程序。

https://github.com/michalbe/md-file-tree

安装该实用程序npm install md-file-tree -g后,您可以简单地运行以获取所有文件树

md-file-tree . > README.md

2

git alias对我有用。

git config --global alias.tree '! git ls-tree --full-name --name-only -t -r HEAD | sed -e "s/[^-][^\/]*\//   |/g" -e "s/|\([^ ]\)/|-- \1/"'

这是输出 git tree

jonavon@XPS13:~/projects/roman-numerals$ git tree
.gitignore
pom.xml
src
   |-- main
   |   |-- java
   |   |   |-- com
   |   |   |   |-- foxguardsolutions
   |   |   |   |   |-- jonavon
   |   |   |   |   |   |-- AbstractFile.java
   |   |   |   |   |   |-- roman
   |   |   |   |   |   |   |-- Main.java
   |   |   |   |   |   |   |-- Numeral.java
   |   |   |   |   |   |   |-- RomanNumberInputFile.java
   |   |   |   |   |   |   |-- RomanNumeralToDecimalEvaluator.java
   |-- test
   |   |-- java
   |   |   |-- com
   |   |   |   |-- foxguardsolutions
   |   |   |   |   |-- jonavon
   |   |   |   |   |   |-- roman
   |   |   |   |   |   |   |-- InterpretSteps.java
   |   |   |   |   |   |   |-- RunCukesTest.java
   |   |-- resources
   |   |   |-- com
   |   |   |   |-- foxguardsolutions
   |   |   |   |   |-- jonavon
   |   |   |   |   |   |-- roman
   |   |   |   |   |   |   |-- Interpret.feature
   |   |   |-- sample-input.txt

可比tree命令

jonavon@XPS13:~/projects/roman-numerals$ tree -n
.
├── pom.xml
├── src
│   ├── main
│   │   └── java
│   │       └── com
│   │           └── foxguardsolutions
│   │               └── jonavon
│   │                   ├── AbstractFile.java
│   │                   └── roman
│   │                       ├── Main.java
│   │                       ├── Numeral.java
│   │                       ├── RomanNumberInputFile.java
│   │                       └── RomanNumeralToDecimalEvaluator.java
│   └── test
│       ├── java
│       │   └── com
│       │       └── foxguardsolutions
│       │           └── jonavon
│       │               └── roman
│       │                   ├── InterpretSteps.java
│       │                   └── RunCukesTest.java
│       └── resources
│           ├── com
│           │   └── foxguardsolutions
│           │       └── jonavon
│           │           └── roman
│           │               └── Interpret.feature
│           └── sample-input.txt
└── target
    ├── classes
    │   └── com
    │       └── foxguardsolutions
    │           └── jonavon
    │               ├── AbstractFile.class
    │               └── roman
    │                   ├── Main.class
    │                   ├── Numeral.class
    │                   ├── RomanNumberInputFile.class
    │                   └── RomanNumeralToDecimalEvaluator.class
    ├── generated-sources
    │   └── annotations
    └── maven-status
        └── maven-compiler-plugin
            └── compile
                └── default-compile
                    ├── createdFiles.lst
                    └── inputFiles.lst

30 directories, 17 files

显然,tree具有更好的输出,但是我希望它使用我的.gitignore文件。这样我的编译内容就不会显示


1

简单的tree命令即可完成工作。例如:tree -o readme.md将打印当前工作目录的树结构并将其写入readme.md。然后在诸如Sublime之类的文本编辑器中打开readme.md文件,并将其内容包装在一对三连引号(```)中。

仅供参考:如果尚未安装OSX,则可能需要在OSX中酝酿安装树。在Linux和Windows中,它应该可以正常工作。同样在Windows中,您可能必须用正斜杠替换连字符。

我希望这有帮助。


1

如果您使用的是Windows tree /f,请在命令提示符下在目录中写入内容。这应该做你的工作。您可以将输出复制并粘贴到我的三倍后勾号周围的markdown上,即'''{此处的树结构}


0

我只是喜欢用UTF-8生成它,并将其链接到每个文件和文件夹,以真正轻松地导航。请看这里的例子。

减价的降价文件


相反,如果投反对票。告诉我您还需要什么其他信息。您可以根据需要生成降价促销。我使用自己的个人图书馆来做,但是我的喜好可能与您不同。
ДеянДобромиров

0

对于那些想要快速解决方案的人:

通过在终端中键入以下命令,有一种方法可以将输出输出到控制台,类似于从树输出:

ls -R YOURFOLDER | grep ':$' | sed -e 's/:$//' -e 's/[^\/]*\//|  /g' -e 's/|  \([^|]\)/|–– \1/g' 

本文档中提到了这种替代方法: https //wiki.ubuntuusers.de/tree/

然后,可以将输出复制并封装为.md文件,其中包含代码块反向标记,如Jonathas BC的答复中所述。

但是请注意,它还会输出节点项目中的所有节点模块文件夹。在树上你可以做类似的事情

tree -I node_modules

排除节点模块文件夹。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.