80 lines
2.4 KiB
Bash
Executable file
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."
|