メインコンテンツへスキップ

Hugoのundraftコマンドを再現する

blog hugo

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"

まとめ
#

しばらくこれで運用してみる.

著者
suy0n9
Software Engineer

Related

MediumからHugoに移行した
blog hugo
ブログはじめました
blog
textlintで日本語をチェックする
textlint vim