Pandoc+シェルスクリプトでマークダウンファイルをHTMLに一括変換する方法

| コメントをどうぞ

とある事情でマークダウンのファイルをHTMLに一括変換する必要があり、色々調べました。
Pandocというのがこの界隈では一般的なツールのようです。

infoScoop OpenSourceでは、ドキュメントのみでgithubにプロジェクトを持っています。
今回はこの一部をHTMLに変換します。

Pandocでできること、できないこと

PandocはマークダウンやHTMLだけではなくpdfやWordなど多岐にわたるフォーマットの相互変換を可能にするツールです。
参考: Pandoc ユーザーズガイド 日本語版

今回、フォルダ配下のmdファイルを丸ごとhtmlに変換したかったのですが、それはPandocだけではできないみたいです。
Pandocはあくまで1ファイルでの変換のみ対応しているんですね。
フォルダをまるごと変換したい場合は、シェルスクリプトを組みます。

Pandocインストール

AmazonLinuxで試してみました。
ドキュメントによるとLinuxの中でもDebianとUbuntuにのみ最新バージョンは対応しているようですが、古いものならサードパーティのリポジトリで提供しています。
お試しなので、今回は古いものを使います。

epelパッケージを追加します。
追加方法は下記を参照。
http://qiita.com/muniere/items/6c4923a070cbbd824f39

epelパッケージにpandocがあるか確認

yum info pandoc --enablerepo=epel

インストールします。

yum install pandoc --enablerepo=epel

これで準備完了です。

フォルダ構成概要

下記のようなディレクトリ構成で試します。
manualディレクトリにはファイルが2つとフォルダが1つあり、フォルダには別のファイルが入っています。
この状態で、dist配下にまるごとHTMLに変換したmanualフォルダが作成されるスクリプトを作ります。

work
|-- mkdown-to-html.sh
|-- dist
|-- manual
     |-- document1.md
     |-- document2.md
     |-- dir
          |-- document3.md

シェルスクリプト作成

まず、manualディレクトリ配下のディレクトリ構造をdistディレクトリにコピーします。
中身のファイルはコピーしません。

find manual -type d | xargs -I dir mkdir dist/dir

次に、mdファイルをHTMLに変換します。

find ./ -iname "*.md" -type f | while read FILE
do
    path=${FILE#./}
    string_filename=${path##*/}
    string_filename_without_extension=${string_filename%.*}
    string_path=${path%/*}
    html_path=${string_path#input}
    html_file_name=${string_filename_without_extension}.html
    html_output_path=${html_path}/${html_file_name}

    echo "##File Info##"
    echo $path
    echo ${string_filename}
    echo ${string_filename_without_extension}
    echo ${string_path}
    echo $html_path
    echo $html_file_name
    echo "output path"
    echo $html_output_path
    echo "#############"

    pandoc $path -s -f markdown_github -t html -o ./dist/${html_output_path}
done

最後に変換したHTMLファイル内で、文字列”.md”を”html”に置換します。

find ./dist/ -type f -exec sed -i "s/\.md/\.html/g"  {} \;

これらをシェルスクリプトに書いて実行すると、distに作成物ができます。

まとめ

Pandocのコマンドのオプション次第では、cssを指定したりもできます。
githubプロジェクトをそのままのスタイルでhtml化することもできそうです。

参考

http://orca8.blogspot.jp/2014/09/centos6-pandoc.html
http://johnmacfarlane.net/pandoc/installing.html
http://www.kishiro.com/FreeBSD/get_filename_in_shellscript.html
http://stackoverflow.com/questions/8082102/how-to-search-and-replace-a-content-of-a-file-using-shell-script
http://stackoverflow.com/questions/26126362/converting-all-files-in-a-folder-to-md-using-pandoc

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>