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

问题描述 投票:0回答:4

我想自动创建带有目录树列表的 Markdown,以便在每个目录中显示在在线存储库(如 GitHub)中。

因此,考虑到我要使用 Linux

tree
命令,可以使用
brew install tree
在 MacOS X 上安装(有关详细信息,请参阅此处),我提出了以下解决方案:

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 了解有关支持的 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。

此解决方案效率不高,并且仅限于

-I
tree
模式选项来过滤掉不需要的目录(比方说构建目录)或文件名等。此外,更新现有
README.md 也无法正常工作
降价。

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

sed tree directory markdown github-flavored-markdown
4个回答
7
投票

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

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

1
投票

看看这个python模块(我是作者)。

它动态生成描述性目录树,并且具有如下所示的 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)

1
投票

在 VSCode 中创建 Markdown 并从 Marketplace 添加 Ascii Tree Generator 扩展


0
投票
  1. Avoid Overwriting README.md Directly:

不要直接覆盖 README.md 文件,而是考虑创建一个临时文件,然后在更改完成后将其移至 README.md。如果在此过程中出现问题,这有助于防止潜在的数据丢失。

tree --dirsfirst --noreport -I README.md > temp_tree.md
echo '```' >> temp_tree.md
mv temp_tree.md README.md
  1. 在 Markdown 中处理代码块:

如果你想在 Markdown 的代码块中包含目录树,你应该在树结构之前和之后用三个反引号(```)包裹树输出。您提供的用于在树结构周围添加三个反引号的命令是正确的。

  1. 更新现有的 README.md:

如果您要更新现有的 README.md 文件,请考虑保留文件中已有的其他内容。您可以使用命令组合将生成的树结构插入到现有文件中,而不完全覆盖它。

tree --dirsfirst --noreport -I README.md > temp_tree.md
echo '```' >> temp_tree.md
awk '/```/{flag=!flag}flag' README.md > temp_existing_content.md
cat temp_tree.md temp_existing_content.md > README.md

这组命令提取三个反引号之间的现有内容,然后将新的树结构与提取的内容连接起来。

注意:此处的 awk 命令查找包含三个反引号的行并切换标志,以便您提取它们之间的内容。

© www.soinside.com 2019 - 2024. All rights reserved.