Mit Unterverzeichnissen
This commit is contained in:
90
commit-interaktiv.sh
Normal file
90
commit-interaktiv.sh
Normal file
@ -0,0 +1,90 @@
|
||||
### 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
|
||||
Reference in New Issue
Block a user