kabelkiste/dotfiles/replace_dotfiles.sh

80 lines
2.4 KiB
Bash
Executable file

#!/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."