67 lines
2.4 KiB
Bash
Executable file
67 lines
2.4 KiB
Bash
Executable file
#!/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."
|