From 34865e5c42a7a86e64f0d2b3f17a38563147243a Mon Sep 17 00:00:00 2001 From: H0mire Date: Fri, 3 May 2024 19:05:17 +0200 Subject: [PATCH] more save script --- update-dots.sh | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/update-dots.sh b/update-dots.sh index 824eda9c5..770f122ed 100644 --- a/update-dots.sh +++ b/update-dots.sh @@ -10,20 +10,15 @@ function get_checksum() { md5sum "$1" | awk '{print $1}' } + # Define the folders to update folders=(".config" ".local") -exclude_folders=("/home/janik/.config/hypr/custom") - -# Build the exclude string for find command -exclude_string="" -for folder in "${exclude_folders[@]}"; do - exclude_string+="! -path $folder -prune -o " -done +# exclude_folders=("/home/janik/.config/hypr/custom") TODO: Implement exclude folders # Then check which files have been modified since the last update modified_files=() -# Find all files in the specified folders and their subfolders, excluding specified folders +# Find all files in the specified folders and their subfolders while IFS= read -r -d '' file; do # Calculate checksums base_checksum=$(get_checksum "$base/$file") @@ -32,7 +27,8 @@ while IFS= read -r -d '' file; do if [[ $base_checksum != $home_checksum ]]; then modified_files+=("$file") fi -done < <(eval find "${folders[@]}" -type f $exclude_string -print0) +done < <(find "${folders[@]}" -type f -print0) + echo "Modified files: ${modified_files[@]}" @@ -43,18 +39,19 @@ if [[ ${#modified_files[@]} -gt 0 ]]; then echo "$file" done else - echo "No files found that have been modified since the last installation/update. All files will be replaced. Are you sure you want to continue? [y/N] " + echo "No files found that have been modified since the last update. All files will be replaced. Are you sure you want to continue? [Y/n] " read -n 1 -r echo - if [[ ! $REPLY =~ ^[Yy]$ ]]; then - exit 1 + if [[ ! $REPLY =~ ^[Nn]$ ]]; then + echo "Exiting." + exit 0 fi fi # Ask if the user wants to keep them -read -p "Do you want to keep these files untouched? [y/N] " -n 1 -r +read -p "Do you want to keep these files untouched? [Y/n] " -n 1 -r echo -if [[ $REPLY =~ ^[Yy]$ ]]; then +if [[ ! $REPLY =~ ^[Nn]$ ]]; then echo "Keeping modified files." else echo "Replacing all files." @@ -67,12 +64,14 @@ git pull # Now only replace the files that are not modified by the user for folder in "${folders[@]}"; do # Find all files (including those in subdirectories) and copy them - find "$folder" -type f $exclude_string -print0 | while IFS= read -r -d '' file; do - if [[ -f "$file" && ! " ${modified_files[@]} " =~ " ${file} " ]]; then - # Construct the destination path - destination="$HOME/$file" - # Copy the file - cp -rf "$base/$file" "$destination" + find "$folder" -type f -print0 | while IFS= read -r -d '' file; do + if [[ -f "$file" ]]; then + if [[ ! " ${modified_files[@]} " =~ " ${file} " ]]; then + # Construct the destination path + destination="$HOME/$file" + # Copy the file + cp -rf "$base/$file" "$destination" + fi fi done done @@ -80,7 +79,7 @@ done # Add the new files, because maybe the update added new files for folder in "${folders[@]}"; do # Find all files (including those in subdirectories) and copy them - find "$folder" -type f $exclude_string -print0 | while IFS= read -r -d '' file; do + find "$folder" -type f -print0 | while IFS= read -r -d '' file; do if [[ ! -f "$HOME/$file" ]]; then echo "Adding new file: $file" # Construct the destination path @@ -90,3 +89,5 @@ for folder in "${folders[@]}"; do fi done done + +