Hugoでブログを書く際にArchetypesを設定しdraftをtrueにしているのだが,記事を書き終わってgit push
する前にdraftをfalseにするのを毎回忘れてしまう.
更にhugo new posts/<filename>.md
でMarkdown作成時にタイムスタンプが付与されるが,記事を書き終えた後に再度タイムスタンプを書き換えるのが面倒だったので調べた.
結果#
どうやらhugo undraft
コマンドがあったが,既にremoveされていた.
How to touch the date after undraft
is deleted?
解決策#
僕は記事を書き始めて日をまたぐ時が多々ある.そしてdraftで書きためておいて然るべきタイミングでpublishしたい時もあるので,上記にあるように簡易スクリプトで対応するようにした.
#!/bin/sh
file=$1
now="$(date "+%Y-%m-%dT%H:%M:%S%z" | sed -e 's/00$/:00/')"
if [ -f "${file}" ]; then
sed -i -e 's/^date: 20.*$/date: '"${now}"'/' \
-e 's/^draft: true$/draft: false/' "${file}"
echo "Update date: ${now}"
echo "Update draft: false"
else
echo "${file} not found"
exit 1
fi
exit 0
date
コマンドで取得した%z
のタイムゾーンでは+hhmm
(+0900)形式になっている.しかしTOMLのoffset-date-timeでは+hh:mm
(+09:00)なので,sed
で一度置換している.
上記をMacで実行する場合,sed
がBSD版なのでGNU版を入れとかないと-i
オプションがうまく動かない.
Homebrew でinstallする.
$ brew install gnu-sed
If you need to use it as “sed”, you can add a “gnubin” directory to your PATH from your bashrc like:
gsed
ではなくsed
として利用できるようにパスを通す.
PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
まとめ#
しばらくこれで運用してみる.