#!/bin/sh # Übernimmt den Altbestand aus dem gemeinsamen uploads-Verzeichnis in die # getrennten Datenverzeichnisse data/belege und data/logo. # # scripts/uploads-uebernahme.sh # # 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."