Dieses Bash-Skript ermöglicht das nahtlose Verschieben von Notizen
zwischen verschiedenen nb-Notebooks (Git-Repositories),
ohne dabei die verknüpften Medien zu verlieren.
In einem digitalen Garten wachsen Inhalte manchmal aus ihrer
ursprünglichen Kategorie heraus. Ein technisches Experiment am
Yamaha FB-01 startet vielleicht in
tech.git, wird aber später Teil einer Dokumentation in
music.git. nb-move automatisiert diesen
Transfer inklusive der Git-Historie und aller Anhänge.
_res/ Ordner und verschiebt
die entsprechenden Dateien automatisch mit in das Ziel-Repository.select für
die Repositories und fzf für die blitzschnelle Dateisuche
(perfekt für das Terminal in Termux oder auf dem Sony Vaio).add,
rm, commit und push für Quell-
und Ziel-Repository in einem Rutsch._res/ innerhalb des jeweiligen Repositories../nb-move.shfzf-Suche die
gewünschte .md Datei auswählen.nb-move.sh)#!/bin/bash
# --- KONFIGURATION ---
BASE_DIR="$HOME/storage/shared/notes"
# 1. Automatische Erkennung aller Repositories
mapfile -t ALL_REPOS < <(find "$BASE_DIR" -maxdepth 2 -name ".git" -type d -exec dirname {} \; | xargs -n1 basename | sort)
if [ ${#ALL_REPOS[@]} -eq 0 ]; then
echo "❌ Keine Notebook-Repositories in $BASE_DIR gefunden!"
exit 1
fi
# 2. Quell-Repository auswählen
echo "--- Quelle wählen ---"
PS3="Aus welchem Notebook stammt die Datei? "
select SOURCE_NAME in "${ALL_REPOS[@]}"; do
if [ -n "$SOURCE_NAME" ]; then
SOURCE_DIR="$BASE_DIR/$SOURCE_NAME"
break
else
echo "Ungültige Auswahl."
fi
done
# 3. Datei im Quell-Repo auswählen
cd "$SOURCE_DIR" || exit
FILE=$(find . -maxdepth 2 -name "*.md" | sed 's|^\./||' | fzf --header="Datei aus $SOURCE_NAME wählen")
[ -z "$FILE" ] && exit
# 4. Ziel-Repository auswählen
echo -e "\n--- Ziel wählen ---"
PS3="Wohin soll '$FILE' verschoben werden? "
mapfile -t TARGET_REPOS < <(for r in "${ALL_REPOS[@]}"; do [[ "$r" != "$SOURCE_NAME" ]] && echo "$r"; done)
select TARGET_NAME in "${TARGET_REPOS[@]}"; do
if [ -n "$TARGET_NAME" ]; then
TARGET_DIR="$BASE_DIR/$TARGET_NAME"
break
else
echo "Ungültige Auswahl."
fi
done
# 5. Sicherheits-Check
if [ -f "$TARGET_DIR/$FILE" ]; then
echo "⚠️ Fehler: '$FILE' existiert bereits in $TARGET_NAME! Abbruch."
exit 1
fi
# 6. Medien-Scan
echo "🔍 Scanne Medienlinks in $FILE..."
RES_FILES=$(grep -oE '_res/[a-zA-Z0-9._-]+' "$FILE" | sort -u)
# 7. Verschiebe-Aktion
mkdir -p "$TARGET_DIR/_res"
if [ -n "$RES_FILES" ]; then
while read -r res_path; do
if [ -f "$res_path" ]; then
echo "📦 Verschiebe Medium: $res_path"
mv "$res_path" "$TARGET_DIR/_res/"
fi
done <<< "$RES_FILES"
fi
mv "$FILE" "$TARGET_DIR/"
# 8. Git-Sync Quell-Repo
git rm "$FILE" 2>/dev/null
git add -u
git commit -m "Verschoben nach $TARGET_NAME: $FILE"
git push origin master
# 9. Git-Sync Ziel-Repo
cd "$TARGET_DIR"
git add .
git commit -m "Empfangen aus $SOURCE_NAME: $FILE"
git push origin master
echo -e "\n✅ Erfolgreich von $SOURCE_NAME nach $TARGET_NAME verschoben!"Teil des Roccodrom-Workflows – Handwerk, Klang und Code.