### commit-interaktiv.sh (manuelle Nutzung) #!/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 interaktive Archivierung..." find Neu/ -type f | while read -r file; do relative_path="${file#Neu/}" target="Archiv/$relative_path" base=$(basename "$file") target_dir=$(dirname "$target") mkdir -p "$target_dir" if [ -e "$target" ]; then echo "⚠️ Datei '$relative_path' existiert bereits im Archiv." base_name="${base%.*}" ext="${base##*.}" if [ "$base_name" = "$ext" ]; then ext=""; else ext=".$ext"; fi version=2 new_base="${base_name}_v${version}${ext}" new_target="$target_dir/$new_base" while [ -e "$new_target" ]; do version=$((version + 1)) new_base="${base_name}_v${version}${ext}" new_target="$target_dir/$new_base" done echo "Vorschlag zum Umbenennen: '$new_base'" read -rp "▶️ Umbenennen? (j = ja, n = nein, sonst abbrechen): " answer if [[ "$answer" =~ ^[Jj]$ ]]; then cp "$file" "$new_target" log "✅ '$file' → '$new_target' (umbenannt)" elif [[ "$answer" =~ ^[Nn]$ ]]; then read -rp "Neuer Dateiname eingeben (ohne Pfad): " user_input [ -z "$user_input" ] && log "⚠️ Abbruch durch Benutzer." && continue custom_target="$target_dir/$user_input" if [ -e "$custom_target" ]; then echo "⚠️ '$user_input' existiert ebenfalls. Übersprungen." log "⚠️ '$file' nicht archiviert (Name doppelt)." continue fi cp "$file" "$custom_target" log "✅ '$file' → '$custom_target' (benutzerdefiniert)" else log "⚠️ Abbruch durch Benutzer." continue fi else cp "$file" "$target" log "✅ '$file' → '$target'" fi done # Aufräumen find Neu/ -type f -delete find Neu/ -mindepth 1 -type d -empty -delete log "🛋 Neu-Verzeichnis aufgeräumt." # Staging + Commit git add --all if git status --porcelain | grep . >/dev/null; then if git commit -m "Manuelle Archivierung am $(TIMESTAMP)"; then log "✅ Commit erfolgreich." else log "❌ Commit fehlgeschlagen. Starte Restore." if [ -x "$RESTORE_SCRIPT" ]; then "$RESTORE_SCRIPT" log "♻️ Restore ausgeführt." fi fi else log "📥 Keine Änderungen zum Committen." fi