如何自动创建目录树列表的 README.md markdown

How to automatically create README.md markdown of directory tree listing

我想自动创建带有目录树列表的 markdown,以便在每个目录中像 GitHub 一样显示在在线仓库中。

因此,考虑到我将使用 Linux tree command that can be installed on MacOS X using brew install tree (see here 了解详细信息),我想出了这个解决方案:

tree --dirsfirst --noreport -I README.md > README.md;sed -i '' '1s/^/```/' README.md;echo \ >> README.md; sed -i '' -e '$s/$/```/' README.md

其中第一个 sed -i '' '1s/^/```/' README.md``` 字符之前 - 请参阅 Mastering (Github) Markdown 了解有关支持的降价的详细信息。

echo echo \ >> README.md; 正在添加换行符。请注意,我没有使用 sed 等效的 sed -i '' -e '$a\' filename,因为这只会在由于 $a 模式(参见 here)不存在时添加换行符。

虽然最后一个 sed -i '' -e '$s/$/```/' README.md 正在向文件添加尾随 ```

tree 命令 tree --dirsfirst --noreport -I README.md 将排除一些模式,将目录放在第一位,忽略报告文件和目录计数。

结果将类似于以下内容:

```.
├── bin
│   ├── Debug
│   │   ├── SampleLibrary.jar
│   │   ├── cooper.jar
│   │   ├── sugar.data.jar
│   │   ├── sugar.jar
│   │   └── swift.jar
│   └── Release
│       ├── SampleLibrary.jar
│       ├── cooper.jar
│       ├── sugar.data.jar
│       ├── sugar.jar
│       └── swift.jar
├── obj
│   ├── Debug
│   │   └── Android
│   │       ├── ClassLibrary2.elements.FilesWrittenAbsolute.txt
│   │       └── samplelibrary.jar
│   └── Release
│       └── Android
│           ├── ClassLibrary2.elements.FilesWrittenAbsolute.txt
│           └── samplelibrary.jar
├── ClassLibrary2.elements
└── ClassLibrary2.elements.user
 ```

你可以看到这个markdown README.md here.

这个解决方案效率不高,它仅限于 tree-I 模式选项来过滤掉不需要的目录(比如说构建目录)或文件名等。它也没有正常工作以更新现有的 README.md markdown。

该解决方案应该适用于 MacOS X(其中 sed 与 Linux 上的解决方案存在一些差异)。

获取源代码标记的一种方法是将所有内容缩进四个空格:

tree --dirsfirst --noreport -I README.md | sed 's/^/    /' > README.md

按照您的方式进行,添加新的第一行和最后一行,每行 ```,我们可以这样做

tree --dirsfirst --noreport -I README.md |
sed '1s/^/```'$'\n''/;$s/$/'$'\n''```/' > README.md

在替换字符串中插入换行符是通过 C 风格转义完成的。或者,我们可以使用 "$(printf '\n')":

tree --dirsfirst --noreport -I README.md |
sed '1s/^/```'"$(printf '\n')"'/;$s/$/'"$(printf '\n')"'```/' > README.md

这些应该都适用于 macOS 上的 sed。

使用GNU sed,会简单一些:

tree --dirsfirst --noreport -I README.md |
sed '1s/^/```\n/;$s/$/\n```/' > README.md

看看this python module(我是作者)

它动态生成描述性的目录树,并且有如下的 markdown 导出格式:

.
├── example_folder\
│ ├── first_subfolder\ 一个文档文件夹
│ │ ├── sub-sub1\
│ │ │ └── file3.sh 这是文件 3
│ │ ├── sub-sub2\
│ │ │ └── file4.cpp 这是文件 4
│ │ └── random_file.rdm 一个记录文件
│ ├── second_subfolder\ _一个记录的文件夹
│ ├── a_text_file.txt 一个文本文件
│ ├── my_javascript.js 这是文件 1
│ └── test.py一个python脚本
└── README.md 主要自述文件\

当然还有一个 ASCII

.
├── example_folder\
│   ├── first_subfolder\ (a documented folder)
│   │   ├── sub-sub1\
│   │   │   └── file3.sh (this is file 3)
│   │   ├── sub-sub2\
│   │   │   └── file4.cpp (this is file 4)
│   │   └── random_file.rdm (a documented file)
│   ├── second_subfolder\ (a documented folder with no documented files)
│   ├── a_text_file.txt (a text file)
│   ├── my_javascript.js (this is file 1)
│   └── test.py (a python script)
└── README.md (The main readme)

在 VSCode 中创建您的 markdown 并从 Marketplace 添加 Ascii Tree Generator extension