wired raven

文字通りの日記。主に思ったことやガジェットについて

ファイルのタイムスタンプを比較してPandocでhtmlを生成したい

現状

index.html
index.md
sub/sub.html
sub/sub.md
  • 同じ名前でMarkdownファイルとPandocで変換したhtmlファイルがある
  • サブフォルダがある

やりたいこと

  • Markdownファイルに変更があったらPandocでhtmlファイルに変換する
  • できればSFTPでアップロードもできると良い

これでできるのでは、という妄想

  1. findでMarkdownファイルの一覧を取得
  2. 一覧を元にMarkdownファイルとhtmlファイルのタイムスタンプを比較
  3. Markdownファイルのほうが新しければPandocにMarkdownファイル、htmlファイルを渡してhtmlファイル生成

シェルスクリプト

# Markdown形式のファイルパスを取得し配列に格納する
mdpath=($(find ./ -name "*.md"))

# カウンタ
cnt=0

# 配列でループ
for mdfile in ${mdpath[@]}; do
  # 拡張子をhtmlに変換する
  htfile=$(echo $mdfile | sed -e "s|\.md|.html|")

  # ファイルの更新日時を比較する
  if [ $mdfile -nt $htfile ]; then
    # mdが新しければPandocでHTML生成
    pandoc -i $mdfile -o $htfile

    # 変換したファイル数をカウント
    cnt=`expr $cnt+1`
  fi
done

# 結果表示
echo "markdown to html: " $cnt "files"

使い方

  1. パスの通った場所にmd2ht.shと名前をつけて保存
  2. 権限を付与する chmod +x md2ht.sh
  3. 基点になる場所でmd2htを実行

メモ

参考