First draft backup and restore dotfiles to quickly use a machine

This commit is contained in:
Sebastian 2024-05-21 17:49:32 +02:00
parent b1672ea3c3
commit 152873f129
2 changed files with 98 additions and 0 deletions

80
dotfiles/replace_dotfiles.sh Executable file
View file

@ -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."

18
dotfiles/restore_dotfiles.sh Executable file
View file

@ -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."