Skip to content

Instantly share code, notes, and snippets.

@kaho2063
Last active November 16, 2019 05:10
Show Gist options
  • Save kaho2063/c76fd07d159e34dd9fd9 to your computer and use it in GitHub Desktop.
Save kaho2063/c76fd07d159e34dd9fd9 to your computer and use it in GitHub Desktop.
このsh以下にあるMarkdownファイルのリスト一覧リンクREADME.mdを作るためのシェルスクリプト。フォルダも6階層まで対応。ライセンスはNYSL(http://www.kmonos.net/nysl/ )です。
#!/bin/bash
# README.mdというファイルに単純にechoしているため、既にREADME.mdがあった場合内容が削除される 注意
echo -e "**Index**\n\n" >README.md
# フォルダが多くなると飛ぶのが面倒なので、[TOC]追加
# TOCに対応していない場合などは考慮していない
echo -e "[TOC]\n\n---" >>README.md
# ファイルへのリンク部分を出力する関数
# $1が検索フォルダ指定
function file_echo () {
find $1 -maxdepth 1 -type f -name "*.md" | while read FILE ; do
local FILE2=`echo "${FILE##*/}" | sed -e "s/\.md//"`
echo "- [$FILE2](${FILE})" >>README.md
done
}
# フォルダごとに見出しをつけて改行してファイル部分も出力する再帰呼出し用関数
# $1が検索フォルダ指定、$2が階層指定
function folder_echo () {
# `.`から始まるフォルダだけ避ける
find $1 -maxdepth 1 -type d | grep -e "[^.].*" | while read DIR ; do
if test "$DIR" != "$1" ; then
local MD_FILE_LIST=`find $DIR -type f -name "*.md"`
if test "$MD_FILE_LIST" == "" ; then
continue
fi
local HEADING="#"
if test $2 != 0 ; then
# 階層ごとに見出しレベルを下げたかったので、ここで#を追加する
# 6階層以下は考慮していない
for i in `seq 1 $2` ; do
HEADING+="#"
done
else
echo "" >>README.md
fi
# フォルダごとに見出しをつける
echo -e "\n$HEADING ${DIR##*/}" >>README.md
local MD_FILE_LIST2=`find $DIR -mindepth 1 -type f -name "*.md"`
# 小フォルダ内に*.mdがある場合、再帰呼出し
if test "$MD_FILE_LIST2" != "" ; then
folder_echo "$DIR" `expr $2 + 1`
fi
local MD_FILE_LIST3=`find $DIR -maxdepth 1 -type f -name "*.md"`
# フォルダ内に*.mdファイルがある場合、ファイル用関数呼び出し
if test "$MD_FILE_LIST3" != "" ; then
echo "" >>README.md
file_echo "$DIR/"
fi
fi
done
}
folder_echo . 0
# このフォルダ直下にあるファイルへのリンク
echo -e "\n# 直下ファイル" >>README.md
file_echo .
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment