sto implementando una funzione di estrazione di un backup sotto forma di tar.bz nel filesystem;la cosa è evidentemente delicata, per questioni di files già esistenti, date del file diverse, versioni salvate di recente ma che in realtà sono più vecchie rispetto ad altre ecc.
volevo provare a fare una cosa in stile etc-update di gentoo: se ci sono differenza fra il file nel filesystem e quello nel tar.bz l'utente decide cosa fare, e puo vedere i 2 files ecc..
codice:
codice:
#!/bin/bash
cd /
backup="/home/evellon/prova.2006-08-21-0935.tar.gz"
echo "Diffences between filesystem and archive:"
n=1
tar --diff --file $backup --directory / | grep -v "time" | while read i; do
echo " $n) $i"
read ciao
let n++
done
esecuzione del codice:
codice:
$ sh check_differences.sh
Diffences between filesystem and archive:
1) home/evellon/test/mklist.sh: Contents differ
ci sono 2 errori: nell'esecuzione non aspetta il mio imput, e in teoria sarebbero 2 i files ad avere differenze, infatti se lancio lo stesso programma commentando la linea "read ciao" l'output è il seguente
codice:
sh check_differences.sh
Diffences between filesystem and archive:
1) home/evellon/test/mklist.sh: Contents differ
2) home/evellon/test/lista_date: Size differs
questo è un ps -e durante il ciclo for
codice:
6546 pts/2 00:00:00 bash
6616 pts/1 00:00:00 sh
6617 pts/1 00:00:00 tar
6618 pts/1 00:00:00 gzip
6619 pts/1 00:00:00 grep
6620 pts/1 00:00:00 sh
6621 pts/2 00:00:00 ps
se uso le pipes come sopra non dovrebbe essere eseguito prima
tar --diff --file $backup --directory /
poi, una volta che il processo è finito
grep -v "time"
e poi una volta che il processo è finito
while read i
?
a me sembra quasi che
ho provato a separare la lettura dal ciclo for in questo modo
files_list=$(tar --diff --file $backup --directory / | grep -v "time"i)
ma così, non so perchè, mi spara le varie righe nella stringa $files_list una dopo l'altra, non separate da degli \n, bensì da degli spazi