Entra

View Full Version : aiuto su esercizio semplice script


IspiCiosa
15-05-2006, 12:13
Salve ragazzi devo realizzare questo script ma non riesco a capire comne fare per
confrontare i 2 file e verificare quale dei due e piu aggiornat o piu vecchio

l'esercizio è questo:

Realizzare uno script

connect.bash <file1> <file2>

che dati <file1> e <file2>, verifica, ogni 10 secondi quale dei due è piu nuovo, e copia quindi il piu recente sul piu vecchio. Segnalare ogni operazione di copia sullo standard output.
Qualora venga un numero di argomenti diverso da due, segnala l'errore ed esce. Se all'inizio o durante il funzionamento uno dei due file non esiste, lo crea, verificando che la directory che lo deve ospitare esista. Se invece ambedue i file non esistono, esce.

mi aiutate?

andbin
15-05-2006, 12:26
Salve ragazzi devo realizzare questo script ma non riesco a capire comne fare per
confrontare i 2 file e verificare quale dei due e piu aggiornat o piu vecchio

l'esercizio è questo:

Realizzare uno script

connect.bash <file1> <file2>

che dati <file1> e <file2>, verifica, ogni 10 secondi quale dei due è piu nuovo, e copia quindi il piu recente sul piu vecchio. Segnalare ogni operazione di copia sullo standard output.
Qualora venga un numero di argomenti diverso da due, segnala l'errore ed esce. Se all'inizio o durante il funzionamento uno dei due file non esiste, lo crea, verificando che la directory che lo deve ospitare esista. Se invece ambedue i file non esistono, esce.Se per "nuovo" intendi con data/ora più recente, il test si può fare in questo modo:
if [ $file1 -nt $file2 ]; then
echo "file1 e` piu` recente di file2"
elif [ $file2 -nt $file1 ]; then
echo "file2 e` piu` recente di file1"
else
echo "file1 = file2"
fi

IspiCiosa
15-05-2006, 12:33
per "nuovo" intendo l'ultimo che è stato modificato....non la data di creazione ma quela di modifica...

IspiCiosa
15-05-2006, 12:52
mi sembra nche funzia lo stesso...

stasera riprovo bene

andbin
15-05-2006, 12:53
per "nuovo" intendo l'ultimo che è stato modificato....non la data di creazione ma quela di modifica...Appunto, quindi va bene il test con -nt.
La documentazione del comando "test" dice:
file1 -nt file2
True if file1 is newer (according to modification date) than file2.

IspiCiosa
15-05-2006, 20:44
si hai ragione ok grazie....

e per questo cosa mi suggerisci?

Se all'inizio o durante il funzionamento uno dei due file non esiste, lo crea, verificando che la directory che lo deve ospitare esista.

andbin
15-05-2006, 21:23
Se all'inizio o durante il funzionamento uno dei due file non esiste, lo crea, verificando che la directory che lo deve ospitare esista.Non mi è ben chiaro cosa devi fare esattamente: e se la directory non esiste, cosa devi fare? Devi crearla??

Comunque ammettiamo di doverla creare, se non esiste. Ti posto una funzione che puoi usare nel tuo script (adattala ovviamente alle tue esigenze):
function check_file ()
{
local F=$1
local DIR

if [ ! -e $F ]; then
DIR=`dirname $F`

if [ ! -d $DIR ]; then
mkdir -p $DIR
fi

echo -n "" > $F
fi
}Poi richiami la funzione con:
...
check_file $FILE1
check_file $FILE2
...Spero possa esserti utile.

IspiCiosa
16-05-2006, 06:58
no non deve crearla deve solo mandare un messagio d'errore e non fare nulla...

se ce crea il file...

cmq grazie mi sei davvero d'aiuto

IspiCiosa
16-05-2006, 06:59
questo è l'esempio:


[usr@host Esempi]$ connect.bash NonEsiste/ping.txt NonEsiste/pong.txt
connect.bash: NonEsiste is not an accessible directory

[usr@host Esempi]$ connect.bash ping.txt pong.txt &
[1] 10796
[usr@host Esempi]$ connect.bash: Copying pong.txt to ping.txt
[usr@host Esempi]$ echo 'Ping!' > ping.txt
[usr@host Esempi]$ connect.bash: Copying ping.txt to pong.txt
[usr@host Esempi]$ rm pong.txt; ls
ping.txt
[usr@host Esempi]$ connect.bash: Copying ping.txt to pong.txt
[usr@host Esempi]$ ls
ping.txt pong.txt
[usr@host Esempi]$ kill 10796
[usr@host Esempi]$ ls
ping.txt pong.txt
[1]+ Terminated connect.bash ping.txt pong.txt