WordPress から Hugo への移行(4)投稿日時を修正する

WordPress から wordpress-to-hugo-exporter プラグインで書き出した Markdown ファイルは、Front matter 部分に投稿日時が書かれている。

これは 2016-07-14T00:47:39+00:00 のような ISO 8601 の時刻表記となっている。しかも UTC であり、日本時間ではない。9時間遅れている。Hugo でサイトを出力したら日本時間に変換されるかと思ったが UTC のまま。Hugo の設定ファイルでタイムゾーンを変更できるかと思っていろいろ調べてみたが結局分からなかった。

過去の投稿の投稿日時なんて少々ずれていてもたいした問題にはならないだろうが、せっかくなので日本時間に修正することにした。かといって 2000 以上ある記事を一つ一つ計算して9時間進めるのは到底できない。できる人ならスクリプトを書いてやってしまうんだろうが、僕は、ややどんくさい方法だが一応変換を自動化することができた。

そのためには FileMaker および Keyboard Maestro を使う。

環境:
・macOS Ventura 13.5(英語環境)
・Claris FileMaker Pro 20.1.2.204
・Keyboard Maestro 7.3.1

(1)GNU sed を使うのでインストールしておく。

$ brew install gnu-sed

(2)まずいちいちファイルを開かなくても、コマンドラインでファイルの中身を読み書きする方法を研究しよう。

WordPress から書き出した Markdown ファイルは以下のような Front matter で始まっている。

---
title: 記事タイトル
author: 投稿者
type: post
date: 2016-07-14T00:47:39+00:00
url: 記事 URL
categories:
  - category-XYX

---
〜以下記事本文〜

5行目の投稿日時をクリップボードに入れるスクリプトは以下のようになる。

$ cat hogehoge.md | grep "date:" | cut -b 7- | pbcopy

(3)5行目を削除するコマンドは以下。

$ gsed -i '5d' hogehoge.md

(4)このあと FileMaker で日時を変換したあと、再び5行目に日時を書き込むことになる。

5行目にクリップボードの中身をペーストするコマンドは以下。

$ pbpaste | { read v ; gsed -i "5i date: "$v"" hogehoge.md ; }

(5)FileMaker で日時を9時間進めるには、タイムスタンプに 32400 を足せばいい。9時間は 9x60x60=32400 秒だからだ。

そのためにスクリプトを駆使して FileMaker がタイムスタンプを整形する必要がある。その上で 32400 を足す。

整形前:
2016-07-14T00:47:39+00:00

整形後:
2016/07/14 00:47:39

そして再び 2016-07-14T9:47:39+09:00 のような ISO 8601 形式に戻す(+09:00 が日本時間であることを示している)。

あまりスマートなスクリプトが書けなかったので、ここでは紹介しないが、テキスト整形がメインなので FileMaker に慣れた人ならすんなりできるはずだ。

FileMaker のスクリプトステップでクリップボードへの受け渡しができるのでこれも以降で使用する。

なお、秒が 0 となっているタイムスタンプは FileMaker での整形の過程で秒部分の :00 が省略されてしまう。これだと Hugo への読み込みで正しく日時が認識されない。FileMaker のスクリプトで桁数チェックをするなどして、:00 を追記するようにしよう。

(6)これらを踏まえた上で Keyboard Maestro で以下のようなワークフローを作った。

メモ:
・gsed はシェルスクリプトを書くときにフルパスで指定しなければいけない($ which gsed で調べた)。
・Finder 上のパスは $KMVAR_Path のような変数で呼び出す。

このワークフローを実行すれば Markdown ファイルの投稿日時を日本時間に修正できた。Keyboard Maestro の繰り返し処理を使うことで、2000 記事だろうとすぐに終わる。

参考:
ISO 8601 の時刻表記 - 雑記帳 - Web/DB プログラミング徹底解説
https://www.keicode.com/note/datetime-iso8601.php

【簡単】catコマンドでファイルを表示する方法とその実例
https://itc.tokyo/linux/cat/

cutコマンドについてまとめました 【Linuxコマンド集】
https://eng-entrance.com/linux-command-cut

Macでsedが期待通り動かない時の対処法あれこれ - gumfum blog
https://gumfum.hatenablog.com/entry/2022/02/09/010000

sedでファイルを上書き保存
http://www.dab.hi-ho.ne.jp/sasa/biboroku/unix/sed-i.html

sedで指定した行の削除をする方法(サンプルコードあり) | ITを使っていこう
https://it-ojisan.tokyo/sed-d/

ある文字列をファイルの特定行に挿入するコマンド - 元RX-7乗りの適当な日々
https://www.na3.jp/entry/20110310/p1

bashでパイプ(標準入力)から受け付けた内容を変数に代入する | 俺的備忘録 ~なんかいろいろ~
https://orebibou.com/ja/home/201708/20170806_001/

collection:Finders Selection [Keyboard Maestro Wiki]
https://wiki.keyboardmaestro.com/collection/Finders_Selection


いいなと思ったら応援しよう!