tipsobsidian
- MacOS前提です
- Quartzで公開する際、記事ののcreated dateとlast modified dateを管理したいが、前者はgitの情報から得るのが難しい
- 知らんけど多分ファイルのリネームとかの問題があるからだと思う
- ファイルシステムのタイムスタンプを使えばいいが、リモートマシンでは
git push
された時に作成されたことになってしまうので、ローカルのタイムスタンプの情報を引っこ抜いて、frontmatterに記入したい
getfileinfo
やstat -f " %SB"
でもファイル作成日は取得できるが、シェルスクリプトでファイルの中身を書き換えるとcreated dateが結構すぐ変わってしまう(sedとか)
- また、gitで複数環境で作業している場合、リモートで作ったファイルはgit pullした日がBirth Dateになる
- なので、次のようなシェルスクリプトを各git環境で実行することで、フロントマッター、全ての環境でのBirth date、もしくはgit blameしたうちの最古のコミット履歴のタイムスタンプのうちから一番古いものをフロントマッターに上書きする
- 必要なツールはいずれもbrewで入れられる
gsed
(フロントマッターのない記事に新たにメタデータを作る。macのsedは使用が違ってややこしいためgsedを使った)
yq
(yamlをいい感じに書き換えてくれる)
- 実装が雑なのでフロントマッターがないファイルは2回実行せんとダメかも
ハマるポイント
dateのフォーマットをパースする際にLC_ALL=C
の環境変数がないと、statコマンドで出てくるNov
みたいな月の短縮系をパースできない。macのdateコマンドはFreeBSDベースだから若干使用が違うのもあってめちゃくちゃ混乱した