🎃
怠惰な人のためのobsidian同期
概要📝
Obsidianはカスタマイズ性に優れたエディタのため、多様な同期方法が存在します。この方法は、その中でも簡単に同期を行うことに重きを置いた方法です。
仕組み🛠️
Google Cloud Storageに保管庫を設置し、これを更新しています。シェルスクリプトになっているので、手動かcrontab等で自動実行するように設定します。
- リモートストレージのタイムスタンプファイルをチェック。ローカルのタイムスタンプファイルがリモートより古い場合、リモートの状態に同期。
- 逆にローカルが新しい場合、リモートストレージをローカルの状態に同期。
余談
仕組みとしては、Google Driveに保管庫を設置して同期する方法と変わりませんが、その場合、もっさり感があり、自前で更新することで、これを回避したいという思惑です。
注意点😯
- 複数の端末から同時に編集するような、ライブ編集には非対応
- パソコン専用。
ソースコード💻
#!/bin/bash
LOCAL_VAULT_PATH="local_obsidian_volt_path/"
GCS_BUCKET_PATH="gs://remote_obsidian_volt_path"
METADATA_FILE="last_sync_timestamp.txt"
LOCAL_METADATA="$LOCAL_VAULT_PATH/$METADATA_FILE"
GCS_METADATA="$GCS_BUCKET_PATH/$METADATA_FILE"
echo "開始: GCSのメタデータファイルの存在確認..."
# GCSからメタデータファイルを取得
if gsutil -q stat $GCS_METADATA; then
echo "GCSにメタデータファイルが存在します。ローカルにコピーします..."
gsutil cp $GCS_METADATA $LOCAL_METADATA.tmp
else
echo "GCSにメタデータファイルが存在しません。ローカルに新しいファイルを作成します..."
touch $LOCAL_METADATA.tmp
fi
echo "タイムスタンプを読み取り、比較を開始します..."
# タイムスタンプの比較
LOCAL_TIMESTAMP=$(cat $LOCAL_METADATA)
GCS_TIMESTAMP=$(cat $LOCAL_METADATA.tmp)
if [[ $GCS_TIMESTAMP > $LOCAL_TIMESTAMP ]]; then
echo "GCSの方が新しい変更があります。ローカルに同期を開始します..."
# GCSの変更をローカルに同期
gsutil rsync -r $GCS_BUCKET_PATH $LOCAL_VAULT_PATH
else
echo "ローカルのデータが最新のようです。GCSの同期はスキップします。"
fi
echo "ローカルの変更内容をGCSにアップロードします..."
# ローカルの変更をGCSに同期
gsutil rsync -r $LOCAL_VAULT_PATH $GCS_BUCKET_PATH
echo "ローカルのメタデータファイルのタイムスタンプを更新し、GCSにアップロードします..."
# メタデータファイルを更新
date +%s > $LOCAL_METADATA
gsutil cp $LOCAL_METADATA $GCS_METADATA
echo "全ての同期処理が完了しました!"
Discussion