Steuerkram/scripts/uploads-uebernahme.sh

67 lines
2.4 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# Übernimmt den Altbestand aus dem gemeinsamen uploads-Verzeichnis in die
# getrennten Datenverzeichnisse data/belege und data/logo.
#
# scripts/uploads-uebernahme.sh <uploads-verzeichnis> <belege-verzeichnis> <logo-verzeichnis>
#
# Aufrufer sind docker-entrypoint.sh (bei jedem Container-Start) und
# scripts/migrate-datenverzeichnis.sh (manueller Umzug). Die Logik liegt bewusst
# hier und nicht doppelt in beiden Skripten.
#
# Idempotent: Ist der Altbestand übernommen, findet ein zweiter Lauf nichts mehr.
# Exit-Code 0 = nichts zu tun oder vollständig übernommen, 1 = Reste verblieben.
set -eu
LEGACY="${1:?uploads-Verzeichnis fehlt}"
BELEGE="${2:?belege-Verzeichnis fehlt}"
LOGO="${3:?logo-Verzeichnis fehlt}"
# Verschiebt den Inhalt von $1 nach $2 und führt dabei bestehende Verzeichnisse
# zusammen. Ein "mv uploads/2026 data/belege/" genügt nicht: Existiert
# data/belege/2026 schon, scheitert mv – oder legt den Baum als
# data/belege/2026/2026 ab. Beides blieb früher unbemerkt, weil die Fehler
# unterdrückt wurden, und die Belege waren anschließend nicht mehr auffindbar.
# Deshalb Datei für Datei, ohne bestehende Ziele zu überschreiben.
merge_tree() {
src="$1"
dst="$2"
( cd "$src" && find . -mindepth 1 -type d -exec mkdir -p "$dst/{}" \; )
( cd "$src" && find . -mindepth 1 -type f ) | while IFS= read -r f; do
rel="${f#./}"
if [ -e "$dst/$rel" ]; then
echo " übersprungen (Ziel existiert bereits): $rel" >&2
elif mv "$src/$rel" "$dst/$rel"; then
echo " $rel"
else
echo " FEHLER beim Verschieben: $rel" >&2
fi
done
find "$src" -mindepth 1 -depth -type d -empty -exec rmdir {} + 2>/dev/null || true
}
if [ ! -d "$LEGACY" ] || [ -z "$(ls -A "$LEGACY" 2>/dev/null)" ]; then
exit 0
fi
mkdir -p "$BELEGE" "$LOGO"
echo "Migration: Altbestand aus uploads/ wird übernommen..."
# Logo zuerst, damit es nicht als Beleg mitwandert
if [ -d "$LEGACY/logo" ]; then
echo " Logo -> data/logo/"
merge_tree "$LEGACY/logo" "$LOGO"
rmdir "$LEGACY/logo" 2>/dev/null || true
fi
echo " Belege -> data/belege/"
merge_tree "$LEGACY" "$BELEGE"
verblieben=$(find "$LEGACY" -mindepth 1 -type f 2>/dev/null | wc -l)
if [ "$verblieben" -gt 0 ]; then
echo "Migration: ACHTUNG – $verblieben Datei(en) verbleiben in uploads/ und müssen von Hand geprüft werden." >&2
exit 1
fi
echo "Migration: Altbestand vollständig übernommen."