Pracuję nad automatycznymi skryptami działającymi na Linux-ie (Debian). Te skrypty są uruchamiane z harmonogramu i manipulują plikami w ich własnych katalogach.
Na końcu skryptów muszę usunąć pliki tymczasowe.
Obecnie mam coś takiego:
#check that some variables are not empty
if [[ -z $var1 || -z $var2 || -z $var3 ]]; then
echo "Some var is empty"
exit 1
fi
workingdir=$var1/$var2
#some checks on working directory
if [[ ! -d $workingdir ]]; then
echo "Directory error"
exit 1
fi
cd $workingdir
if [[ $(pwd) != $workingdir ]]; then
echo "Change directory error"
exit 1
fi
#...here goes the main part of the script
#and at the end, the "cleaning"
if [[ -d $workingdir/temp/$var3 ]]; then
find $workingdir/temp/$var3 -delete;
fi
Czy masz jakiś pomysł, którego mógłbym użyć, aby zmniejszyć ryzyko usunięcia czegoś niewłaściwego?
Dziękuję Ci.
pozdrowienia
linux
bash
bash-scripting
Lennelei
źródło
źródło
"double-quote $variables"
.for f in "$workingdir"*; do...
*
nie zostanie rozwinięty. Dlaczego nie spróbujeszecho "$workingdir"*
,echo "$workingdir*"
,echo "$workingdir"/*
aecho "$workingdir/*"
i zobaczyć na własne oczy?Odpowiedzi:
Twój skrypt wie, jakie pliki są tworzone i gdzie się znajdują.
To ogólne stwierdzenie jest tutaj ważnym punktem. Jeśli naprawdę chcesz usunąć tylko utworzone przez siebie pliki, śledź, które pliki tworzysz. Więc zwykle robiłbyś:
aby utworzyć pliki tymczasowe (zobacz
man mktemp
szczegóły) i wykonajkiedy skończysz z plikami tymczasowymi. Alternatywnie możesz utworzyć katalog tymczasowy i go usunąć.
Czego nie powinieneś robić
ponieważ spowoduje to usunięcie plików tymczasowych również dla innych uruchomionych instancji skryptu.
źródło