[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: