Witam
Piszę skrypt do kasowania backupów, i chciałbym zaczerpnąć waszej opinii.
Backupy robią się raz dziennie każdy w osobnym folderze o nazwie F$date
F201307130821
F201307133453
F201307311212
F201309240950
W każdym folderze tworzy się plik log_file z error codem backupu.
Backup finish with 0 code error
Piszę skrypt który będzie sprawdzał ilość dobrych backupów i złych, kasował złe i zostawiał minimalną ilość dobrych backupów, jeżeli nie będzie min. dobrych to zostawi również złe.
naklepałem coś takiego
#!/bin/bash
function del_backup ( ){
dir=$1
max_depth=$2
atime=$3
min_good_bckp=$4
good_bckp_counter=0
# cd $dir/
########################################################################
## petla zlicza dobre backupy z error code = 0 i dodaje 1 do countera ##
########################################################################
for i in F* ; do
echo $i
log_file_code=$(cat $i/log_file | grep Back | awk '{print $4}')
if [ "$log_file_code" = 0 ]; then
good_bckp_counter=$[good_bckp_counter + 1]
fi
done
#########################################################################
#echo ilosc dobrych bckpow = $good_bckp_counter
#echo min good bckp = $min_good_bckp
########################################################################
## if ilość dobrych wieksza od minimalnej ilosci dobrych ##
########################################################################
if [ "$good_bckp_counter" -gt "$min_good_bckp" ]; then
echo kasuje...
find find . -maxdepth $max_depth -atime +$atime -name "F201*/" -exec rm -r {} \\;
else
exit 1
fi
}
del_backup test 1 2 2
ale zastanawiam się jak zrobić selektywne kasowanie tj rozpoznanie który katalog jest dobry który zły, więc zrobiłem tablice gdzie jest nazwa i kod . Czy takie rozumowanie ma sens? Nie wiem jak obliczyć ilość starszych niż 30 dni, myślałem o czyś takim
date -d "$a -30 days" +%Y%m%d
potem prównanie i usuwanie starszych z error codem innym niz 0 , może da się to zrobić lepiej łatwiej szybciej, proszę o wyrozumiałość i opinie. Krytyka mile widziana
#!/bin/bash.
DIRS=$(find . -type d | wc -l)
echo '#######################'
echo liczba folderow = $DIRS
echo '#######################'
#########################################
# tworzenie tablic z nazwami folderow #
#########################################
k=0
n=0
good_bckp_counter=0
bad_bckp_counter=0
for i in F* ; do
echo n = $n; echo i = $i
matrix_dir[$n]=$i;
echo 'matrix_dir['$n']' = ${matrix_dir[$n]}
error_code=$(cat $i/log_file | grep Back | awk '{print $4}')
matrix_error[$n]=$error_code
echo 'matrix_error['$n']' = ${matrix_error[$n]}
if [ ${matrix_error[$n]} -eq 0 ]
then
good_bckp_counter=$[good_bckp_counter + 1]
else
bad_bckp_counter=$[bad_bckp_counter +1]
fi
n=$[n + 1]
done
echo ilosc bkpow z error -ne 0 = $bad_bckp_counter
echo ilosc bkpow z error -eq 0 = $good_bckp_counter.
while [ $k -ne $n ] ; do
echo Folder ${matrix_dir[$k]} kod: ${matrix_error[$k]} id= $k....
k=$[k + 1]
done