diff --git a/dotfiles/replace_dotfiles.sh b/dotfiles/replace_dotfiles.sh new file mode 100755 index 0000000..8ab8cc3 --- /dev/null +++ b/dotfiles/replace_dotfiles.sh @@ -0,0 +1,80 @@ +#!/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." diff --git a/dotfiles/restore_dotfiles.sh b/dotfiles/restore_dotfiles.sh new file mode 100755 index 0000000..0970bcd --- /dev/null +++ b/dotfiles/restore_dotfiles.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# Sicherungsordner im Home-Verzeichnis +BACKUP_DIR="$HOME/dotfiles_backup" + +# Durchlaufe alle Dateien im Sicherungsordner +for backup_file in "$BACKUP_DIR"/.*; do + # Ignoriere '.' und '..' + if [[ "$(basename "$backup_file")" != "." && "$(basename "$backup_file")" != ".." ]]; then + # Zielpfad im Home-Verzeichnis + target="$HOME/$(basename "$backup_file")" + + # Datei aus dem Sicherungsordner ins Home-Verzeichnis verschieben + mv "$backup_file" "$target" + fi +done + +echo "Dotfiles wurden aus dem Sicherungsordner wiederhergestellt."