chore(hq): daily sync 2026-02-24
This commit is contained in:
57
hq/scripts/sync-aom-to-obsidian.sh
Executable file
57
hq/scripts/sync-aom-to-obsidian.sh
Executable file
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
# sync-aom-to-obsidian.sh
|
||||
# Syncs Atomizer V2 docs/AOM/ → Obsidian vault (with markdown→wiki-link conversion)
|
||||
# Direction: Repo (source of truth) → Obsidian (read target for iPad/SeaDrive)
|
||||
# Per DEC-036: one-way sync, repo wins.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
REPO_AOM="/home/papa/repos/Atomizer-V2/docs/AOM"
|
||||
OBSIDIAN_AOM="/home/papa/obsidian-vault/2-Projects/P-Atomizer-Operating-Manual"
|
||||
LOG="/home/papa/atomizer/logs/aom-sync.log"
|
||||
|
||||
mkdir -p "$(dirname "$LOG")"
|
||||
|
||||
# Check source exists
|
||||
if [ ! -d "$REPO_AOM" ]; then
|
||||
echo "$(date -Iseconds) ERROR: Source not found: $REPO_AOM" >> "$LOG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Sync files (delete extras in target that aren't in source)
|
||||
# --exclude .obsidian to preserve any Obsidian workspace settings
|
||||
rsync -av --delete \
|
||||
--exclude '.obsidian/' \
|
||||
--exclude '.trash/' \
|
||||
"$REPO_AOM/" "$OBSIDIAN_AOM/" 2>&1 | tail -5 >> "$LOG"
|
||||
|
||||
# Convert standard markdown links back to Obsidian wiki-links
|
||||
# Pattern: [Display Text](./path/to/file.md) → [[path/to/file|Display Text]]
|
||||
# Pattern: [filename](./filename.md) → [[filename]]
|
||||
find "$OBSIDIAN_AOM" -name "*.md" -type f | while read -r file; do
|
||||
# Convert [text](relative/path.md#heading) → [[relative/path#heading|text]]
|
||||
perl -i -pe '
|
||||
# [Text](./file.md#heading) → [[file#heading|Text]]
|
||||
s/\[([^\]]+)\]\(\.\/([\w\/-]+)\.md(#[^\)]+)?\)/
|
||||
my ($text, $path, $heading) = ($1, $2, $3 || "");
|
||||
my $target = $path . $heading;
|
||||
# If display text matches filename, simplify
|
||||
my $basename = $path; $basename =~ s|.*\/||;
|
||||
($text eq $basename) ? "[[$target]]" : "[[$target|$text]]"
|
||||
/ge;
|
||||
# [Text](path.md) without ./ prefix
|
||||
s/\[([^\]]+)\]\(([\w\/-]+)\.md(#[^\)]+)?\)/
|
||||
my ($text, $path, $heading) = ($1, $2, $3 || "");
|
||||
my $target = $path . $heading;
|
||||
my $basename = $path; $basename =~ s|.*\/||;
|
||||
($text eq $basename) ? "[[$target]]" : "[[$target|$text]]"
|
||||
/ge;
|
||||
' "$file"
|
||||
done
|
||||
|
||||
# Handle the README.md → MAP rename for Obsidian navigation
|
||||
if [ -f "$OBSIDIAN_AOM/README.md" ] && [ ! -f "$OBSIDIAN_AOM/MAP - Atomizer Operating Manual.md" ]; then
|
||||
cp "$OBSIDIAN_AOM/README.md" "$OBSIDIAN_AOM/MAP - Atomizer Operating Manual.md"
|
||||
fi
|
||||
|
||||
echo "$(date -Iseconds) OK: Synced $(find "$OBSIDIAN_AOM" -name '*.md' | wc -l) docs" >> "$LOG"
|
||||
Reference in New Issue
Block a user