Esercizio 3 Prova Pratica 25-09-2014
Jump to navigation
Jump to search
Scrivere un programma python o uno scrip bash che faccia un backup storico di un file.
backn file n
deve mantenere n versioni del file specificato. n>2
Esempio:
backn miofile 10
se esiste miofile.9 deve essere rinominato in miofile.10
se esiste miofile 8 deve essere rinominato in miofile 9
e cosi' via fino a miofile.2, rinominato miofile 3.
ora se miofile.1 ha lo stesso contenuto di miofile.3, miofile diventa un link fisico a miofile.2
miofile viene copiato in miofile.1
Soluzione di Blissett
#! /bin/bash
if [[ $# != 2 || ! -f $1 ]]
then
echo "Usage: $0 file n_backup"
exit -48
fi
file=$1
n_backup=$2
cartella="cartellaBackup"
true=0
if [[ ! -d $cartella ]]
then
mkdir $cartella
fi
cd ./$cartella
for i in `find ./ -name "$file*" | sort -n -r -t. -k3 | cut -d. -f3`
do
true=1
tmp=`find ./ -name "$file.$i"`
num=$(($i+1))
mv $tmp "$file.$num"
if [[ $num -gt n_backup ]]
then
rm "$file.$num"
fi
done
if [[ $true -eq 1 ]]
then
cmp -s "$file.2" "../$file"
if [[ $? -eq 0 ]]
then
echo creo link fisico.
ln "$file.2" "$file.1"
else
cp ../$file ./
mv $file "$file.1"
fi
else
cp ../$file ./
mv $file "$file.1"
fi