Converting file and directory structure to Markdown.
小ネタが続きます。
皆様はこんな御経験をお持ちではないでしょうか。
- ソフトウェアリリース時に、ソースコードのディレクトリ構造について説明資料を用意したい。できたら、ハイパーリンクをクリックすると、当該ディレクトリの中を閲覧できるようにしたい。
- 社内のイントラネット上で、歴史的事情で混乱したディレクトリ構造になっている社内資料について、どこにどんな資料があるのか、ドキュメント化したい。
いずれも Markdown で文書化すれば、ハイパーリンクを含んだ使いやすい資料とすることができます。しかし、Markdown であっても、ディレクトリ構造を手で記述するのは面倒ですよね?
tree コマンド
そんな時に最初に思いつくのが、Unix 系 OS で広く使われている(?)tree コマンドです。
残念ながら、tree コマンドには直接 Markdown 形式で出力する機能がありません。しかしながら、つらつらと man ページを眺めていたら、-H なるオプションを見つけました。これは、出力を HTML 形式にする、というものです。
例えば、こんな感じで実行できます。
bash$ tree -L 2 -H . > poi.html
こんな感じに出力されます。
<!DOCTYPE html> <html> <head> <!-- 略 --> </head> <body> <h1>Directory Tree</h1><p> <a href=".">.</a><br> ├── <a href="./kesu.md">kesu.md</a><br> ├── <a href="./poi.html">poi.html</a><br> ├── <a href="./%E8%AD%B0%E4%BA%8B%E9%8C%B2/">議事録</a><br> │ ├── <a href="./%E8%AD%B0%E4%BA%8B%E9%8C%B2/2019%E5%B9%B4/">2019年</a><br> │ ├── <a href="./%E8%AD%B0%E4%BA%8B%E9%8C%B2/2020%E5%B9%B4/">2020年</a><br> │ └── <a href="./%E8%AD%B0%E4%BA%8B%E9%8C%B2/2021%E5%B9%B4/">2021年</a><br> └── <a href="./%E9%A1%A7%E5%AE%A2%E8%B3%87%E6%96%99/">顧客資料</a><br> ├── <a href="./%E9%A1%A7%E5%AE%A2%E8%B3%87%E6%96%99/A%E7%A4%BE/">A社</a><br> └── <a href="./%E9%A1%A7%E5%AE%A2%E8%B3%87%E6%96%99/B%E7%A4%BE/">B社</a><br> <br><br> </p> <p> 7 directories, 2 files <br><br> </p> <hr> <p class="VERSION"> tree v1.8.0 © 1996 - 2018 by Steve Baker and Thomas Moore <br> HTML output hacked and copyleft © 1998 by Francesc Rocher <br> JSON output hacked and copyleft © 2014 by Florian Sesser <br> Charsets / OS/2 support © 2001 by Kyosuke Tokoro </p> </body> </html>
ここでひらめきました!(← 大げさ) Pandoc を使えば、Markdown に変換できるのでは?
Pandoc で Markdown に変換する
こんな感じです。
bash$ tree -L 2 -H . | pandoc -f html -o poi.md
無事に変換できました。HTML からの変換はやや強引なので、あまり綺麗な Markdown にはなっていませんが、あとはチョコチョコと手編集すればなんとかなりそうです。
Directory Tree
==============
[.](.)\
├── [kesu.md](./kesu.md)\
├── [poi.html](./poi.html)\
├── [議事録](./%E8%AD%B0%E4%BA%8B%E9%8C%B2/)\
│ ├── [2019年](./%E8%AD%B0%E4%BA%8B%E9%8C%B2/2019%E5%B9%B4/)\
│ ├── [2020年](./%E8%AD%B0%E4%BA%8B%E9%8C%B2/2020%E5%B9%B4/)\
│ └── [2021年](./%E8%AD%B0%E4%BA%8B%E9%8C%B2/2021%E5%B9%B4/)\
└── [顧客資料](./%E9%A1%A7%E5%AE%A2%E8%B3%87%E6%96%99/)\
├── [A社](./%E9%A1%A7%E5%AE%A2%E8%B3%87%E6%96%99/A%E7%A4%BE/)\
└── [B社](./%E9%A1%A7%E5%AE%A2%E8%B3%87%E6%96%99/B%E7%A4%BE/)\
\
\
7 directories, 2 files\
\
------------------------------------------------------------------------
tree v1.8.0 © 1996 - 2018 by Steve Baker and Thomas Moore\
HTML output hacked and copyleft © 1998 by Francesc Rocher\
JSON output hacked and copyleft © 2014 by Florian Sesser\
Charsets / OS/2 support © 2001 by Kyosuke Tokoro
お粗末様でした。今日はここまで。