用Markdown语法表示目录和文件结构

我想在我的一些Jekyll博客文章中描述目录和文件结构,Markdown是否提供了一个输出这样的东西的整洁的方式?

例如,你可以 Jekyll网站的这个链接上看到目录和文件结构非常整齐地输出在页面上:

. ├── _config.yml ├── _drafts | ├── begin-with-the-crazy-ideas.textile | └── on-simplicity-in-technology.markdown ├── _includes | ├── footer.html | └── header.html ├── _layouts | ├── default.html | └── post.html ├── _posts | ├── 2007-10-29-why-every-programmer-should-play-nethack.textile | └── 2009-04-26-barcamp-boston-4-roundup.textile ├── _data | └── members.yml ├── _site └── index.html 

我相信上面的行代码字符是Unicode(如这里的答案中所述),但不知道如何Markdown或不同的浏览器将处理它们。 我希望Markdown已经包含了一些这样做的方法,输出上面的Unicode字符。

如果你关心Unicode字符,你可以使用ASCII来build立结构,所以你的结构变成了

 . +-- _config.yml +-- _drafts | +-- begin-with-the-crazy-ideas.textile | +-- on-simplicity-in-technology.markdown +-- _includes | +-- footer.html | +-- header.html +-- _layouts | +-- default.html | +-- post.html +-- _posts | +-- 2007-10-29-why-every-programmer-should-play-nethack.textile | +-- 2009-04-26-barcamp-boston-4-roundup.textile +-- _data | +-- members.yml +-- _site +-- index.html 

如果selectANSI输出,则与tree的格式类似。

我在另一个存储库中跟踪了一个例子,并在一个三重反引号( ``` )中包装了目录结构:

 ``` project │ README.md │ file001.txt │ └───folder1 │ │ file011.txt │ │ file012.txt │ │ │ └───subfolder1 │ │ file111.txt │ │ file112.txt │ │ ... │ └───folder2 │ file021.txt │ file022.txt ``` 

您可以使用树来生成与您的示例非常相似的内容。 获得输出后,可以将其包装在<pre>标记中以保留纯文本格式。

我做了一个节点模块来自动执行这个任务: mddir

用法

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

要安装:npm install mddir -g

为当前目录生成降价:mddir

为任何绝对path生成:mddir / absolute / path

为相对path生成:mddir〜/ Documents / whatever。

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

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

故障排除

如果您收到错误“node \ r:没有这样的文件或目录”,问题是您的操作系统使用不同的行尾,而mddir无法parsing它们,而没有明确地将行结束样式设置为Unix。 这通常影响Windows,但也有一些版本的Linux。 将行结尾设置为Unix样式必须在mddir npm全局bin文件夹中执行。

行结尾修复

获取npm bin文件夹path:

npm config get prefix

镉进入该文件夹

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 

如已经build议的那样,你可以使用tree 。 但是为了与重组文本一起使用,还需要一些额外的参数。

如果您使用pandoc生成pdf,标准tree输出将不会被打印。

tree --dirsfirst --charset=ascii /path/to/directory将产生一个漂亮的ASCII树,可以像这样集成到你的文档中:

 .. code:: . |-- ContentStore | |-- de-DE | | |-- art.mshc | | |-- artnoloc.mshc | | |-- clientserver.mshc | | |-- noarm.mshc | | |-- resources.mshc | | `-- windowsclient.mshc | `-- en-US | |-- art.mshc | |-- artnoloc.mshc | |-- clientserver.mshc | |-- noarm.mshc | |-- resources.mshc | `-- windowsclient.mshc `-- IndexStore |-- de-DE | |-- art.mshi | |-- artnoloc.mshi | |-- clientserver.mshi | |-- noarm.mshi | |-- resources.mshi | `-- windowsclient.mshi `-- en-US |-- art.mshi |-- artnoloc.mshi |-- clientserver.mshi |-- noarm.mshi |-- resources.mshi `-- windowsclient.mshi 

我build议使用芥末,那么你可以使用像这样的markdown-ish的感觉

 root/ # entry comments can be inline after a '#' # or on their own line, also after a '#' readme.md # a child of, 'root/', it's indented # under its parent. usage.md # indented syntax is nice for small projects # and short comments. src/ # directories MUST be identified with a '/' fileOne.txt # files don't need any notation fileTwo* # '*' can identify executables fileThree@ # '@' can identify symlinks 

并把这个确切的语法在这个js库上

芥末的例子

我为我的Dropbox文件列表编写了这个脚本。

sed用于删除后面的符号链接文件/文件夹path的完整path

不幸的是,标签丢失。 使用zsh我能够保存标签。

!/ usr / bin / env bash

 #!/usr/bin/env zsh F1='index-2.md' #With hyperlinks F2='index.md' if [ -e $F1 ];then rm $F1 fi if [ -e $F2 ];then rm $F2 fi DATA=`tree --dirsfirst -t -Rl --noreport | \ sed 's/->.*$//g'` # Remove symlink adress and -> echo -e '```\n' ${DATA} '\n```' > $F1 # Markdown needs triple back ticks for <pre> # With the power of piping, creating HTML tree than pipe it # to html2markdown program, creates cool markdown file with hyperlinks. DATA=`tree --dirsfirst -t -Rl --noreport -H http://guneysu.pancakeapps.com` echo $DATA | \ sed 's/\r\r/\n/g' | \ html2markdown | \ sed '/^\s*$/d' | \ sed 's/\# Directory Tree//g' | \ > $F2 

像这样的输出:

 ``` . ├── 2013 │  └── index.markdown ├── 2014 │  └── index.markdown ├── 2015 │  └── index.markdown ├── _posts │  └── 2014-12-27-2014-yili-degerlendirmesi.markdown ├── _stash └── update.sh ``` 

 [BASE_URL/](BASE_URL/) ├── [2013](BASE_URL/2013/) │  └── [index.markdown](BASE_URL/2013/index.markdown) ├── [2014](BASE_URL/2014/) │  └── [index.markdown](BASE_URL/2014/index.markdown) ├── [2015](BASE_URL/2015/) │  └── [index.markdown](BASE_URL/2015/index.markdown) ├── [_posts](BASE_URL/_posts/) │  └── [2014-12-27-2014-yili-degerlendirmesi.markdown](_posts/2014-12-27-2014-yili-degerlendirmesi.markdown) ├── [_stash](BASE_URL/_stash/) ├── [index-2.md](BASE_URL/index-2.md) └── [update.sh](BASE_URL/update.sh) * * * tree v1.6.0 © 1996 - 2011 by Steve Baker and Thomas Moore HTML output hacked and copyleft © 1998 by Francesc Rocher Charsets / OS/2 support © 2001 by Kyosuke Tokoro 

如果你想dynamic生成它,我推荐使用Frontend-md 。 使用起来很简单。