First draft backup and restore dotfiles to quickly use a machine
This commit is contained in:
parent
b1672ea3c3
commit
152873f129
2 changed files with 98 additions and 0 deletions
80
dotfiles/replace_dotfiles.sh
Executable file
80
dotfiles/replace_dotfiles.sh
Executable 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
18
dotfiles/restore_dotfiles.sh
Executable 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."
|
||||
Loading…
Add table
Reference in a new issue