如何自动创建目录树列表

时间:2016-03-30 23:52:30

标签: sed tree directory markdown github-flavored-markdown

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

因此,鉴于我将使用可以使用brew install tree在MacOS X上安装的Linux tree command(有关详细信息,请参阅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),因此只会添加换行符。 / p>

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

tree命令tree --dirsfirst --noreport -I README.md将排除某些模式,首先放置目录,忽略报告文件和dir计数。

结果将类似于以下内容:

```.
├── 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
 ```

您可以看到此降价README.md here

此解决方案效率不高,并且仅限-I tree模式选项来过滤掉不需要的dirs(比如构建目录)或文件名等。此外它无法正常工作更新现有的README.md降价。

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

2 个答案:

答案 0 :(得分:2)

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

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

这些都应该适用于Mac OS的sed。

使用GNU sed,它会更简单一些:

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

答案 1 :(得分:1)

看看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)