#!/bin/bash ASK=yes #ASK=no for no prompt prior to removing. CWD="$(realpath "$PWD")" safe_del_root="$PWD/savefiles" Portable_Browser_Profile_locations=("/opt/Iron-portable/iron32/PROFILE") HOMES=("/root" "/home/spot") Home_Browser_Caches=("/.cache/chrome" "/.cache/mozilla") Home_Files_Misc=("/.history" "/.local/share/recently-used.xbel") #isc_Dels=("/etc/shadow" "/etc/resolv.conf") Misc_Dels=("/etc/resolv.conf" "/etc/rc.d/PUPSTATE" "/etc/rc.d/BOOTCONFIG") System_Roots=("" "/cont") IFSo="$IFS" IFS=$'\n' Save_File_Paths=($(ls -1 "$CWD/savefiles")) echo "Save_File_Paths=${Save_File_Paths[@]}" #log=yes export LOGFILE="$CWD/clean_log" export TRACE=true [ -f "$LOGFILE" ] && rm "$LOGFILE" touch "$LOGFILE" function maybe_remove(){ #log stop #echo "remove \"$1\"? (y/n)" >&2 sync #fsync /dev/tty read -p "remove \"$1\"? (y/n)" answer if [ "$ASK" = no ] || [[ "$answer" = y* ]] || [[ "$answer" = Y* ]]; then return 0 else return 1 fi #log start } export -f maybe_remove function log(){ set +x #TODO add more verbose log option that doesn't do this. local SET_X=false local logfile="${2}" local trace="$3" if [ ! -z "$LOGFILE" ]; then case "$1" in init) [ "$TRACE" = true ] && SET_X=true [ ! -f "$LOGFILE" ] && rm "$LOGFILE" exec 6>&1 # Link file descriptor #6 with stdout. exec 7>&2 [ ! -f "$LOGFILE" ] && touch "$LOGFILE" ;; start) [ "$TRACE" = true ] && SET_X=true #exec 1>&6 # Link file descriptor #6 with stdout. #exec 2>&7 exec &> >(tee -a "$LOGFILE") ;; stop) #exec 1>/dev/null # Link file descriptor #6 with stdout. #exec 2>/dev/null # exec 2>&7 # exec 1>&6 # Link file descriptor #6 with stdout. #exec 1>&- #exec 2>&- exec 1>&6 exec 2>/dev/tty #exec 2>/dev/stderr #exec 1>/dev/stdout ;; esac fi [ "$SET_X" = true ] && set -x } export -f log log init log start for a_save_file in "${Save_File_Paths[@]}"; do for a_Sys_Root in "${System_Roots[@]}"; do a_save_FP="$CWD/savefiles/$a_save_file$a_Sys_Root" #Delete Portable Browser Profiles for a_BP_loc in "${Portable_Browser_Profile_locations[@]}"; do a_path="$a_save_FP$a_BP_loc" if [ -d "$a_path" ]; then a_path="$(realpath "$a_path")" log stop set +x maybe_remove "$a_path" && { log start if [[ "$a_path" = "$safe_del_root/"* ]]; then rm -rf "$a_path" fi } || log start fi done #Delete Misc Files in the home directory for a_home in "${HOMES[@]}"; do a_home_path="$a_save_FP$a_home" IFS=$'\n' for a_home_cache_loc in "${Home_Browser_Caches[@]}"; do a_path="$a_home_path$a_home_cache_loc" if [ -d "$a_path" ]; then a_path="$(realpath "$a_path")" log stop set +x maybe_remove "$a_path" && { log start if [[ "$a_path" = "$safe_del_root/"* ]]; then rm -rf "$a_path"/* fi } || log start fi done #Delete Misc Files in the home directory for a_file in "${Home_Files_Misc[@]}"; do a_path="$a_home_path$a_file" if [ -e "$a_path" ]; then a_path="$(realpath "$a_path")" if [[ "$a_path" = "$safe_del_root/"* ]]; then log stop set +x maybe_remove "$a_path" && { log start if [ -d "$a_path" ]; then rm -rf "$a_path" elif [ -f "$a_path" ]; then rm -f "$a_path" fi } || log start fi fi done done #Delete Misc. Files for a_file in "${Misc_Dels[@]}"; do a_path="$a_home_path$a_file" if [ -e "$a_path" ]; then a_path="$(realpath "$a_path")" if [[ "$a_path" = "$safe_del_root/"* ]]; then log stop set +x maybe_remove "$a_path" && { log start if [ -d "$a_path" ]; then rm -rf "$a_path" elif [ -f "$a_path" ]; then rm -f "$a_path" fi } || log start fi fi done done done #TODO, delete ssh keys, delete samba credentials, delete wifi passwords.