#!/bin/bash # Funktion, um Dotfiles zu ersetzen und Softlinks zu erstellen replace_dotfiles() { local src_dir="$1" local target_dir="$2" local backup_dir="$3" # Durchlaufe alle Dateien im Quellverzeichnis for item in "$src_dir"/*; do local relative_path="${item#$src_dir/}" local target="$target_dir/$relative_path" local backup_target="$backup_dir/$relative_path" # Ignoriere '.' und '..' sowie das Skript selbst if [[ "$(basename "$item")" != "." && "$(basename "$item")" != ".." && "$(basename "$item")" != "replace_dotfiles.sh" ]]; then # Wenn das Element ein Verzeichnis ist, erstelle es im Zielverzeichnis und im Backup-Verzeichnis und rufe die Funktion rekursiv auf if [[ -d "$item" ]]; then mkdir -p "$target" mkdir -p "$backup_target" replace_dotfiles "$item" "$target_dir" "$backup_dir" else # Wenn die Datei im Zielverzeichnis existiert und keine Softlink ist if [[ -e "$target" && ! -L "$target" ]]; then # Datei in den Sicherungsordner verschieben (inkl. Ordnerstruktur) mkdir -p "$(dirname "$backup_target")" mv "$target" "$backup_target" fi # Softlink zum Dotfile im Zielverzeichnis erstellen ln -sfn "$item" "$target" fi fi done } # Verzeichnis des aktuellen Verzeichnisses DOTFILES_DIR="$(pwd)" # Sicherungsordner im Home-Verzeichnis BACKUP_DIR="$HOME/dotfiles_backup" # Wenn der Sicherungsordner bereits existiert if [[ -d "$BACKUP_DIR" ]]; then echo "Das Backup-Verzeichnis $BACKUP_DIR existiert bereits." echo "Bitte wählen Sie eine Option:" echo "1) Überschreiben" echo "2) Neues Verzeichnis mit Datum und Uhrzeit erstellen" echo "3) Abbrechen" read -p "Option (1/2/3): " option case $option in 1) echo "Überschreiben des vorhandenen Backup-Verzeichnisses..." rm -rf "$BACKUP_DIR" mkdir -p "$BACKUP_DIR" ;; 2) timestamp=$(date +"%Y%m%d_%H%M%S") BACKUP_DIR="${BACKUP_DIR}_$timestamp" echo "Erstellen eines neuen Backup-Verzeichnisses: $BACKUP_DIR" mkdir -p "$BACKUP_DIR" ;; 3) echo "Abgebrochen." exit 1 ;; *) echo "Ungültige Option. Abgebrochen." exit 1 ;; esac else mkdir -p "$BACKUP_DIR" fi # Dotfiles ersetzen und Softlinks erstellen replace_dotfiles "$DOTFILES_DIR" "$HOME" "$BACKUP_DIR" echo "Dotfile-Symlinks wurden aktualisiert und gesichert."