はじめに

Hugoで新しいポストを作成するコマンドは、

1hugo new [path to new file]

ですが、私はフォルダを分けているので

1hugo new posts/21/Q1/0213-[title]

のような長いパスになっていました。いちいち入力するのはめんどくさいし、よく間違えるのでシェルスクリプトを作りました。

1# usage
2./new.sh title

作り方

中身は以下のようになっています。

1title=$1
2year=`date '+%y'`
3quoter=`date '+Q%q'`
4date=`date '+%m%d-'`
5path=posts/$year/$quoter/$date$title/index.md
6hugo new $path

まず、$1はコマンドライン引数を表しています。ここにタイトルが入ります。
また、このようにすると変数varにコマンドの結果を入れることができます。

1var=`command`

dateコマンドを利用して必要な値を取得し、変数に入れ、$pathで結合しています。 あとはコマンドを実行して新しいポストを生成するだけです。 と思いましたが、macOSで動作しません。macOSのdateコマンドには、%qがなくクオータが取得できません。そこで、if-elif-elseを使って書き直しました。

 1# useage ./newpost title
 2# $1 := titile
 3
 4title=$1
 5year=`date '+%y'`
 6month=`date '+%m'`
 7date=`date '+%d-'`
 8#quoter=`date '+Q%q'` # for Linux, not for macOS
 9if [ $month == 01 ] || [ $month == 02 ] || [ $month == 03 ]; then
10  quoter=1
11elif [ $month == 04 ] || [ $month == 05 ] || [ $month == 06 ]; then
12  quoter=2
13elif [ $month == 07 ] || [ $month == 08 ] || [ $month == 09 ]; then
14    quoter=3
15else
16    quoter=4
17fi
18path=posts/$year/Q$quoter/$month$date$title/index.md
19hugo new $path

これで目的を達成できました。