#!/bin/bash set -euo pipefail cd "$(dirname "$0")" LOGFILE="archiv.log" TIMESTAMP() { date '+%Y-%m-%d %H:%M:%S'; } log() { echo "[$(TIMESTAMP)] $1" | tee -a "$LOGFILE" } RESTORE_SCRIPT="./restore-archiv.sh" log "➡️ Starte Archivierungslauf..." # 1. Dateien aus Neu/ prüfen und nach Archiv/ kopieren for file in Neu/*; do [ -e "$file" ] || continue base=$(basename "$file") target="Archiv/$base" if [ -e "$target" ]; then log "⚠️ Datei '$base' existiert bereits im Archiv. Archivierung abgebrochen." echo "⚠️ Datei '$base' existiert bereits im Archiv! Bitte umbenennen oder löschen." exit 1 fi done # Kopieren & Löschen for file in Neu/*; do [ -e "$file" ] || continue base=$(basename "$file") target="Archiv/$base" cp "$file" "$target" log "✅ '$base' nach Archiv kopiert." done for file in Neu/*; do [ -e "$file" ] || continue base=$(basename "$file") rm "$file" log "🧹 '$base' aus Neu gelöscht." done # 2. Änderungen vormerken (inkl. Löschungen) # Änderungen vollständig vormerken (auch neue Dateien) git add --all log "📝 Alle Änderungen vorgemerkt (git add --all)." # Prüfen, ob es Änderungen gibt (gestaged oder nicht) if git status --porcelain | grep . >/dev/null; then # es gibt Änderungen, Commit starten if git commit -m "Archivierung von Dateien aus Neu am $(TIMESTAMP)"; then log "✅ Commit erfolgreich." else # Commit fehlgeschlagen: Restore ausführen ... log "❌ Commit fehlgeschlagen. Versuche Archiv wiederherzustellen..." echo "⚠️ Commit abgebrochen, da Änderungen im Archiv blockiert wurden." if [ -x "$RESTORE_SCRIPT" ]; then "$RESTORE_SCRIPT" log "♻️ Archiv wurde automatisch wiederhergestellt." echo "ℹ️ Archiv wurde auf den letzten Commit zurückgesetzt." else log "❌ Restore-Skript '$RESTORE_SCRIPT' nicht gefunden oder nicht ausführbar!" echo "⚠️ Restore-Skript nicht gefunden oder nicht ausführbar!" fi exit 1 fi else log "📭 Keine Änderungen zum Committen." echo "Keine Änderungen zum Committen." exit 0 fi # 3. Commit versuchen if git diff --cached --quiet; then log "📭 Keine Änderungen zum Committen." echo "Keine Änderungen zum Committen." exit 0 else if git commit -m "Archivierung von Dateien aus Neu am $(TIMESTAMP)"; then log "✅ Commit erfolgreich." exit 0 else log "❌ Commit fehlgeschlagen. Versuche Archiv wiederherzustellen..." echo "⚠️ Commit abgebrochen, da Änderungen im Archiv blockiert wurden." if [ -x "$RESTORE_SCRIPT" ]; then "$RESTORE_SCRIPT" log "♻️ Archiv wurde automatisch wiederhergestellt." echo "ℹ️ Archiv wurde auf den letzten Commit zurückgesetzt." else log "❌ Restore-Skript '$RESTORE_SCRIPT' nicht gefunden oder nicht ausführbar!" echo "⚠️ Restore-Skript nicht gefunden oder nicht ausführbar!" fi exit 1 fi fi