hugo new post/hogehoge.md
と入力すると、content/post/hogehoge.md
とファイルが生成されますが、
これだと少し記事の管理が不便なので、
- 毎回
post/
と付けるのを省きたい - markdownファイル名の前に日付を付けたい
- 生成したあと、markdownのファイル名がtitle要素に含まれてしまうので、これをslug要素に移動させたい
の2点を解消するスクリプトを書いてみました。
ちなみに、default.md
は以下のようにしてあります。
+++
date = "now()"
slug = ""
title = ""
categories = ["未分類"]
tags = ["", "", ""]
+++
まず、
- 毎回
post/
と付けるのを省きたい - markdownファイル名の前に日付を付けたい
ですが、スクリプトの引数で、markdownのファイル名を受け取って、以下のようにfile_nameを定義して、
これをhugo new
に渡します。
slug="$1"
file_name="post/$(date +"%Y-%m-%d")-${slug}.md"
hugo new "$file_name"
これで、content/post/2016-02-05-hogehoge.md
のように記事が生成されます。
次に、
- 生成したあと、markdownのファイル名がtitle要素に含まれてしまうので、これをslug要素に移動させたい
ですが、記事生成後に、sed
コマンドで、
- title = “@@@@” を title = "” に置換する
- slug = "” を、 slug = “$slug” に置換する($slugはスクリプトで受け取ったファイル名)
を行います。“$file_path"を作って、sedに渡します。
file_path="content/$file_name"
sed -i '' 's/title = \".*\"/title = \"\"/g' "$file_path"
sed -i '' "s/slug = \".*\"/slug = \"$slug\"/g" "$file_path"
これで、毎回titleにファイル名が入ってしまうのを防いで、slugにファイル名を入れることが出来ました。
最終的なスクリプトファイルは以下のようになります。
#!/bin/bash
set -u
usage() {
echo "Usage : $0 [-w] [title_name]" 1>&2
}
main () {
cd $(cd $(dirname $0) && pwd)
OPEN_EDITOR=0
for ARG; do
case "$ARG" in
-*)
while getopts w OPT "$ARG"; do
case "$OPT" in
w) OPEN_EDITOR=1;;
*) usage; exit 1;;
esac
done
;;
esac
done
shift $(expr $OPTIND - 1)
[ $# -ne 1 ] && usage && exit 1
slug="$1"
file_name="post/$(date +"%Y-%m-%d")-${slug}.md"
file_path="content/$file_name"
if [ ! -e "$file_path" ]; then
hugo new "$file_name"
sed -i '' 's/title = \".*\"/title = \"\"/g' "$file_path"
sed -i '' "s/slug = \".*\"/slug = \"$slug\"/g" "$file_path"
else
echo "$file_name already exists."
fi
[ $OPEN_EDITOR -eq 1 ] && atom "$file_path"
}
main "$@"
“-w"をつけた時は、エディタ(Atom)で開いてすぐ編集できるようにしています。