Slette filer fra bash ...

frogmaster
Antal: 3145
Tilmeldt:
20-05-2010
User is offline
Slette filer fra bash ...

Er altid en risikabel ting. Selv pro har kvajet sig. Hvis man alligevel har brug for det, så skal man sikre sig at bash er failsafe.

Dette herunder sletter Favicons i Google Chrome og tømmer user cache (~/.cache). Det bør være sikkert at bruge, men hvis nogle finder en fejl eller forbedring, så modtages info med tak.

#!/bin/bash

# Define variables
Dir_name_1=~/.config/google-chrome/Default/
Dir_name_2=~/.cache/

# Delete Chrome Favicons
echo "Preparing to delete Favicons in Google Chrome" >&2
if [[ -d $Dir_name_1 ]]; then
if cd $Dir_name_1 ; then
echo "Deleting Chrome's Favicons" >&2
rm -f Favicons
rm -f Favicons-journal
else
echo "Cannot cd to '$Dir_name_1'" >&2
# exit 1
fi
else
echo "No such directory: '$Dir_name_1'" >&2
# exit 1
fi
# echo -e "Chrome's Favicons \033[33;1mdeleted\033[0m" >&2
echo
# exit

# Delete files and folders recursively within the user cache
echo "Preparing to delete everything in user cache" >&2
if [[ -d $Dir_name_2 ]]; then
if cd $Dir_name_2 ; then
echo "Recursively deleting Files and Folders in user cache" >&2
echo
rm -r -f .* *
else
echo "Cannot cd to '$Dir_name_2'" >&2
# exit 1
fi
else
echo "No such directory: '$Dir_name_2'" >&2
# exit 1
fi
# echo -e "Files and Folders deleted in user cache \033[33;1mdeleted\033[0m" >&2
echo
# exit

# run bleachbit
#PROGRAM="bleachbit"
#echo -e "Running\033[33;1m $PROGRAM \033[0m"
#$PROGRAM

$SHELL


mich
mich's picture
Antal: 920
Tilmeldt:
13-10-2007
User is offline
Nu er jeg ikke script-haj

Jeg ser ingen åbenlyse fejl (hvad jeg heller ikke havde ventet), men nu er jeg heller ikke script-haj.

Når jeg skal teste potentielt skadevoldende scripts, plejer jeg at afprøve dem på kopier af de virkelige data.
Somme tider bliver jeg forbavset over, hvilke indlysende ting, jeg har kunnet overse.

./mich


frogmaster
frogmaster's picture
Antal: 3145
Tilmeldt:
20-05-2010
User is offline
Når jeg skal teste

#1: Når jeg skal teste potentielt skadevoldende scripts, plejer jeg at afprøve dem på kopier af de virkelige data.

Det er selvfølgelig vigtigt. Også at ændre filnavne i scriptet til nogen der ikke eksistere, for at teste fejlmeddelser. For at gøre det mere fejlsikkert, er der tilført en funktion der tvinger bruger til at bekræfte med Enter tasten og stdout og stderr er undertrykket, for at undgå terminalen skriver lange ting. Ellers kan jeg ikke finde på mere.

#!/bin/bash

# Define variables
DIR_NAME_1=~/.config/google-chrome/Default/
DIR_NAME_2=~/.cache/
PROGRAM="bleachbit"

# Define function (force to use Enter key)
PAUSE_ENTER(){
echo -e "Press \033[33;1m[Enter]\033[0m key to continue..."
read -s -p "" fackEnterKey
}

# Delete Chrome Favicons
echo "Preparing to delete Favicons in Google Chrome" >&2
if [[ -d $DIR_NAME_1 ]]; then
    if cd $DIR_NAME_1 ; then
        rm -f Favicons
        rm -f Favicons-journal
        echo -e "\033[33;1mDone\033[0m" >&2
    else
        echo -e "\033[1;31;1mAborting - Cannot cd to '$DIR_NAME_1'\033[0m" >&2
#    exit 1
    fi
else
    echo -e "\033[1;31;1mAborting - No such directory: '$DIR_NAME_1'\033[0m" >&2
#    exit 1
fi
echo
# exit

# Delete files and folders recursively within the user cache
echo "Preparing to delete everything in user cache" >&2
if [[ -d $DIR_NAME_2 ]]; then
    if cd $DIR_NAME_2 ; then

        # Read function (wait for Enter to be pressed)
        PAUSE_ENTER

        # Delete ~/.cache files and suppress stdout and stderr
        rm -r -f .* * &>/dev/null
        echo -e "\033[33;1mDone\033[0m" >&2
    else
        echo -e "\033[1;31;1mAborting - Cannot cd to '$DIR_NAME_2'\033[0m" >&2
#    exit 1
    fi
else
    echo -e "\033[1;31;1mAborting - No such directory: '$DIR_NAME_2'\033[0m" >&2
#    exit 1
fi
echo
# exit
$SHELL

# run bleachbit
#echo -e "Running\033[33;1m $PROGRAM \033[0m"
#$PROGRAM &>/dev/null


marlar
Antal: 2781
Tilmeldt:
05-12-2009
User is offline
Når jeg skal teste

#1: Når jeg skal teste potentielt skadevoldende scripts, plejer jeg at afprøve dem på kopier af de virkelige data.

Ditto her. Desuden bruger jeg tit at smide et echo foran, så den i stedet for at udføre kommandoen, udskriver den i stedet.


frogmaster
frogmaster's picture
Antal: 3145
Tilmeldt:
20-05-2010
User is offline
Der er en ting i scriptet

#1 Somme tider bliver jeg forbavset over, hvilke indlysende ting, jeg har kunnet overse.

Der er en ting i scriptet der ikke er fejl sikkert. Det tjekker om biblioteket eksisterer, men ikke om filerne gør (Favicons). Med andre ord bør der tilføres endnu en variabel og if/else, hvis der også skal tjekkes for det.


mich
mich's picture
Antal: 920
Tilmeldt:
13-10-2007
User is offline
Der er en ting i

#4: Der er en ting i scriptet der ikke er fejl sikkert. Det tjekker om biblioteket eksisterer, men ikke om filerne gør (Favicons).

Og det opdager man måske først senere - i hvert fald hvis man ikke skriver scripts jævnligt. Man kan ende med et script med en masse tests og fejlhåndteringer, men det bliver jo nok mere robust af det.

./mich


frogmaster
frogmaster's picture
Antal: 3145
Tilmeldt:
20-05-2010
User is offline
Og det opdager man

#5: Og det opdager man måske først senere

Ja. I det her eksempel (Favicons) opdager man det med det samme. Bogmærkeikonerne er der stadig i Chrome når man åbner browseren, hvis Google finder på at ændre filnavnet. I andre situationer kan det være alvorligt at filer man troede var slettet stadig er der.