Re: log
>>>>> On Sun, 29 Jul 2001 23:15:25 +0200, Ferdinando <zappagalattica@inwind.it> said:
F> * domenica 29 luglio 2001, alle 10:13, Lele Gaifax scrive:
>> L'opzione `-ctime' dice:
>>
>> -ctime n File's status was last changed n*24 hours ago.
>>
>> che detta in italiano sarebbe "accetta i file modificati N o
>> più ore fa".
F> -ctime n Lo stato del file ha subito l'ultima modifica n*24 ore
F> fa.
F> Questo è il man in Italiano, sai io e l'Inglese non andiamo
F> troppo d'accordo e quando è possibile cerco documentazione in
F> Italiano.
F> Comunque mi sa che il numero dopo il -ctime se 1 dovrebbe
F> corrispondere a 24 ore
Certo, scusa, grossa svista!
F> però per sicurezza ho sostituito -ctime
F> con -cmin (che è lo stesso comando in nminuti) e sai che ho
F> scoperto ?
F> Mi cancella il file di log, TUTTO il file non le righe con data
F> antecedente, quindi l'ho dovuto "ricostruire" con touch.
Infatti, come ti ho detto, quel comando NON guarda nemmeno il
*contenuto* del file in questione!
Filtrare sul contenuto è un tantino più difficile: dovresti leggere il
file riga per riga, grosso modo con questo codice
cat /var/log/debug | while read linea; do
...
done
A questo punto, al posto dei `...', dovresti mettere del codice che
a) separa l'istante iniziale
# Scomponi $linea separando le varie parole, ed estrai le prime 3
set $linea && mese=$1 && giorno=$2 && ora=$3
# Riassembla l'istante, aggiungendo l'anno che non c'è nel file
istante="$mese $giorno $ora 2001"
b) trasforma l'istante in un numero confrontabile facilmente, ad
esempio i secondi dal 1/1/1970
secondi=$(date -d "$istante" +"%s")
c) emette la riga solo se questo numero è maggiore del riferimento che
ti vuoi
# Calcola lo stesso numero di secondi per l'istante di
# riferimento, in questo caso il 1 gennaio 2001
riferimento=$(date -d "00:00:00 2001-01-01" +"%s")
if [ $secondi -ge $riferimento]; then echo $linea; fi
Riordinando il tutto, questo dovrebbe andare, anche se un po'
grezzino... :-)
# Calcola lo stesso numero di secondi per l'istante di
# riferimento, in questo caso il 1 gennaio 2001
riferimento=$(date -d "00:00:00 2001-01-01" +"%s")
cat /var/log/debug | while read linea; do
# Scomponi $linea separando le varie parole, ed estrai le prime 3
set $linea && mese=$1 && giorno=$2 && ora=$3
# Riassembla l'istante, aggiungendo l'anno che non c'è nel file
istante="$mese $giorno $ora 2001"
# Trasformalo in secondi dall'istante "0" (1/1/1970)
secondi=$(date -d "$istante" +"%s")
# Se l'istante in questione è maggiore o uguale al
# riferimento, emetti la riga letta su stdout
if [ $secondi -ge $riferimento]; then echo $linea; fi
done
A questo punto, supponendo che lo scriptino qui sopra si chiami
"filtra2001", dovresti essere in grado di fare qc del tipo
mv debug debug.completo
cat debug.completo | filtra2001 > debug
hth, ciao, lele.
--
nickname: Lele Gaifax | Quando vivro' di quello che ho pensato ieri
real: Emanuele Gaifas | comincero' ad aver paura di chi mi copia.
email: lele@seldati.it | -- Fortunato Depero, 1929.
Reply to:
- References:
- log
- From: Ferdinando <zappagalattica@inwind.it>
- Re: log
- From: Daniele Nicolodi <daniele@grinta.net>
- Re: log
- From: Lele Gaifax <lele@seldati.it>
- Re: log
- From: Ferdinando <zappagalattica@inwind.it>
- Re: log
- From: Lele Gaifax <lele@seldati.it>