打印目录&文件结构与图标表示Markdown

我想要一个Linux命令打印目录&以树的形式显示文件结构,每个文件之前可能有Unicode图标,以及一些关于在Markdown文档中包含输出的最佳语法的提示,行与行之间没有空格。

例子:

.
├── _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
369829 次浏览

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

如果您关心Unicode字符,您可以使用ASCII来构建结构,这样您的示例结构就变成了

.
+-- _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

如果你选择ANSI输出,它类似于tree使用的格式。

我遵循了另一个库中的一个例子,并将目录结构包装在一对三重反引号(```)中:

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

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

sed用于删除位于->之后的符号链接文件/文件夹路径的完整路径

使用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

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

使用

节点mddir "../relative/path/"

安装方法:npm install mddir -g

为当前目录生成降价:mddir

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

生成一个相对路径:mddir ~/Documents/whatever。

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

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

故障排除

如果你收到错误'node\r: No such file or directory',问题是你的操作系统使用了不同的行结束符,如果你没有显式地将行结束符样式设置为Unix, mddir无法解析它们。这通常会影响Windows,但也会影响某些版本的Linux。将行结束符设置为Unix样式必须在mddir npm global bin文件夹中执行。

行结束修复

获取npm bin文件夹路径:

npm config get prefix

Cd到那个文件夹里

酿造安装dos2unix

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

这将行结束符转换为Unix而不是Dos

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

示例生成的降价文件结构'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

我建议使用芥末酱,然后你可以使用像这样的标记

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库中抛出确切的语法

wasabi example

如果你想动态生成它,我建议使用Frontend-md。使用起来很简单。

正如已经推荐的,你可以使用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

如果你正在使用Atom编辑器,你可以通过ascii-tree包来完成这一点。

你可以写出下面的树:

root
+-- dir1
+--file1
+-- dir2
+-- file2

并通过选中它并按ctrl-alt-t将其转换为以下内容:

root
├── dir1
│   └── file1
└── dir2
└── file2

在OSX下,使用reveal.js,如果我只是使用tree,然后复制/粘贴输出,就会出现渲染问题:出现奇怪的符号。

我找到了两种可能的解决方案。

1)使用字符集ascii并简单地复制/粘贴到markdown文件中的输出

tree -L 1 --charset=ascii

2)在markdown文件中直接使用HTML和unicode

<pre>
.
&#8866; README.md
&#8866; docs
&#8866; e2e
&#8866; karma.conf.js
&#8866; node_modules
&#8866; package.json
&#8866; protractor.conf.js
&#8866; src
&#8866; tsconfig.json
&#8985; tslint.json
</pre>

希望能有所帮助。

如果你使用VS Code,这是一个用于生成文件树的很棒的扩展

直接添加到markdown…

📦quakehunter
┣ 📂client
┣ 📂node_modules
┣ 📂server
┃ ┗ 📜index.js
┣ 📜.gitignore
┣ 📜package-lock.json
┗ 📜package.json

这里有一个NPM模块:

npm dree

它允许您将目录树表示为字符串或对象。将它与命令行一起使用将允许您将表示保存在txt文件中。

例子:

$ npm dree parse myDirectory --dest ./generated --name tree