[Risolto] Ricerca file di Log
[Risolto] Ricerca file di Log
Ciao a tutti,
Sto cercando di risolvere un problema con una find.
In pratica devo costruire un comando che mi trovi tutti files di LOG, creati da una applicazione, tranne l'ultimo, per poi zipparli e trasferirli altrove.
Il problema è che l'ultimo file di log creato non necessariamente è stato creato il giorno precedente, vi faccio un esempio per farvi capire meglio.
Questa applicazione ad ogni avvio genera un file di log, ovviamente l'applicazione non viene avviata ogni giorno, pertanto ad oggi 05/08 ho 3 file di LOG:
log1 del 19-07
log2 del 23-07
log3 del 29-07
il mio intento è individuare log1 e log2 con una find e comprimerli con il comando -exec gzip {} +
ho trovato questo comando che mi da il risultato atteso:
find -exec stat -c '%Y %n' {} \; ! -name '*gz' | sort -nr | awk 'NR==2,NR==99 {print $2}'
ma il problema è che questa find non restituisce i files ma l'elenco testuale dei file corretti (nell'esempio log1 e log2) con non può essere passato a gxip per la compressione.
Avete qualche suggerimento?
Sto cercando di risolvere un problema con una find.
In pratica devo costruire un comando che mi trovi tutti files di LOG, creati da una applicazione, tranne l'ultimo, per poi zipparli e trasferirli altrove.
Il problema è che l'ultimo file di log creato non necessariamente è stato creato il giorno precedente, vi faccio un esempio per farvi capire meglio.
Questa applicazione ad ogni avvio genera un file di log, ovviamente l'applicazione non viene avviata ogni giorno, pertanto ad oggi 05/08 ho 3 file di LOG:
log1 del 19-07
log2 del 23-07
log3 del 29-07
il mio intento è individuare log1 e log2 con una find e comprimerli con il comando -exec gzip {} +
ho trovato questo comando che mi da il risultato atteso:
find -exec stat -c '%Y %n' {} \; ! -name '*gz' | sort -nr | awk 'NR==2,NR==99 {print $2}'
ma il problema è che questa find non restituisce i files ma l'elenco testuale dei file corretti (nell'esempio log1 e log2) con non può essere passato a gxip per la compressione.
Avete qualche suggerimento?
Ultima modifica di fabiopig il martedì 31 agosto 2021, 16:00, modificato 1 volta in totale.
-
- Imperturbabile Insigne
- Messaggi: 2848
- Iscrizione: domenica 11 maggio 2008, 18:03
- Desktop: plasma
- Distribuzione: 22.04
- Località: Palermo
Re: Ricerca file di Log
Prima di provare ad aiutarti nella direzione che chiedi, conosci logrotate?
Siccome è molto configurabile, è possibile che ti risolva il problema con meno faticaDESCRIPTION
logrotate is designed to ease administration of systems that generate large numbers of log files. It allows automatic rotation, compression, removal, and mailing of log files. Each log file may
be handled daily, weekly, monthly, or when it grows too large.
Re: Ricerca file di Log
ciao la rotazione dei file di log viene già fatta direttamente dell'application, quindi i file ruotati ce li ho già.
-
- Imperturbabile Insigne
- Messaggi: 2848
- Iscrizione: domenica 11 maggio 2008, 18:03
- Desktop: plasma
- Distribuzione: 22.04
- Località: Palermo
Re: Ricerca file di Log
Per avere elencati tutti i file tranne l'ultimo non puoi semplicemente usare ls ed eliminare il più recente, per esempio con tail?In pratica devo costruire un comando che mi trovi tutti files di LOG, creati da una applicazione, tranne l'ultimo
Codice: Seleziona tutto
$ ls /tmp/foo
'log1 del 19-07' 'log2 del 23-07' 'log3 del 29-07'
$ ls /tmp/foo/* -1t | tail -n+2
/tmp/foo/log2 del 23-07
/tmp/foo/log1 del 19-07
$
Re: Ricerca file di Log
in questa cartella ci sono n tipologie di log, nominati in modo diverso, quindi io dovrei filtrare per nome con il -name"nomefilelog*" escludere i file già zippati con ! -name '*gz' ed infine conservarmi solo il più recente
-
- Imperturbabile Insigne
- Messaggi: 2848
- Iscrizione: domenica 11 maggio 2008, 18:03
- Desktop: plasma
- Distribuzione: 22.04
- Località: Palermo
Re: Ricerca file di Log
Pausa pranzo, rieccomi.
Senza conoscere precisamente il pattern con cui vengono nominati questi file di log non si può essere molto precisi ma comunque il seguente codice potrebbe funzionare come esempio (avendo visto che fai uso di sort ho dato per scontato che il nomefile ha un qualche suffisso o prefisso che ne permette l'ordinamento lessicografico).
Per comodità, questo esempio assume arbitrariamente che il nome dei file sia fatto sul modello nomefilelogn.log con n numero progressivo. In questo modo mi disinteresso della data/ora di creazione dei file per identificare ed escludere il più recente.
Se le cose sono sostanzialmente divergenti da questa ipotesi, precisa bene nome ed estensione di questi log: potrebbe bastare fare un ritocco alla espressione regolare
Una volta fatti gli adattamenti al pattern di denominazione effettivo, se l'output ottenuto dovesse andare bene basterebbe sostituire al comando echo "..." il comando con cui effettui la compressione dei log
Senza conoscere precisamente il pattern con cui vengono nominati questi file di log non si può essere molto precisi ma comunque il seguente codice potrebbe funzionare come esempio (avendo visto che fai uso di sort ho dato per scontato che il nomefile ha un qualche suffisso o prefisso che ne permette l'ordinamento lessicografico).
Codice: Seleziona tutto
$ ls -1 /tmp/foo/*
/tmp/foo/nomefilelog1.log
/tmp/foo/altro_logfile.log
/tmp/foo/filelog_diverso.log
/tmp/foo/nomefilelog1.gz
/tmp/foo/nomefilelog2.log
/tmp/foo/nomefilelog3.log
$ find /tmp/foo -regex ".*nomefilelog.*\.log" | sort -r | tail -n+2 | xargs -I {} echo "sto comprimendo in /tmp/foo/mioarchivio il file {}"
sto comprimendo in /tmp/foo/mioarchivio il file /tmp/foo/nomefilelog2.log
sto comprimendo in /tmp/foo/mioarchivio il file /tmp/foo/nomefilelog1.log
$
Se le cose sono sostanzialmente divergenti da questa ipotesi, precisa bene nome ed estensione di questi log: potrebbe bastare fare un ritocco alla espressione regolare
Una volta fatti gli adattamenti al pattern di denominazione effettivo, se l'output ottenuto dovesse andare bene basterebbe sostituire al comando echo "..." il comando con cui effettui la compressione dei log
Re: Ricerca file di Log
Ciao,
scusami se sono scomparso, ma le ferie mi hanno assalito...
ho provato ad effettuare la find che mi hai consigliato ma senza successo...
i file hanno questo nome:
pippo.2021-07-19.log
pippo.2021-07-23.log
pippo.2021-07-26.log
poi ho:
pluto.2021-07-19.log
pluto.2021-07-23.log
pluto.2021-07-26.log
provando la find:
find /test/ -regex "pippo.20*\.log" | sort -r | tail -n+2
non ottengo nulla
in cosa sto sbagliando?
scusami se sono scomparso, ma le ferie mi hanno assalito...
ho provato ad effettuare la find che mi hai consigliato ma senza successo...
i file hanno questo nome:
pippo.2021-07-19.log
pippo.2021-07-23.log
pippo.2021-07-26.log
poi ho:
pluto.2021-07-19.log
pluto.2021-07-23.log
pluto.2021-07-26.log
provando la find:
find /test/ -regex "pippo.20*\.log" | sort -r | tail -n+2
non ottengo nulla
in cosa sto sbagliando?
- gio1968
- Prode Principiante
- Messaggi: 42
- Iscrizione: venerdì 1 maggio 2020, 22:52
- Desktop: LXQt
- Distribuzione: lubuntu 20.04.3 LTS
- Sesso: Maschile
Re: Ricerca file di Log
Stai usando -regex, quindi
anche se sarebbe meglio, a meno che tu voglia proprio anche cercare nelle sottodirectory,
. significa ogni carattere mentre, ovviamente, \. il punto
Come puoi vedere l'output non inizia con pippo:
E' spiegato nel man di find, con un paio di esempi.
P.S. Quando scrivi per maggiore chiarezza dovresti usare i code.
Codice: Seleziona tutto
find /test -regex '.*pippo\.20.*\.log'
Codice: Seleziona tutto
find /test -maxdepth 1 -type f -regex '.*pippo\.20.*\.log'
Come puoi vedere l'output non inizia con pippo:
Codice: Seleziona tutto
/test/pippo.2021-07-26.log
/test/pippo.2021-07-23.log
/test/pippo.2021-07-19.log
P.S. Quando scrivi per maggiore chiarezza dovresti usare i code.
- UbuNuovo
- Imperturbabile Insigne
- Messaggi: 4446
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: Ricerca file di Log
Altre due cose: la directory test è davvero in root, altrimenti devi impostare il percorso reale.
Visto che utilizzi i nomi di file con formato data anglosassone conviene usare sort -V con -r per il reverse; tipo:
Visto che utilizzi i nomi di file con formato data anglosassone conviene usare sort -V con -r per il reverse; tipo:
Codice: Seleziona tutto
find /percorso/a/test -regex '.*pippo\.20.*\.log' | sort -Vr | tail -n+2
Salva l'Ucraina!
Re: Ricerca file di Log
Vi ringrazio Ragazzi, siete stati davvero gentili ed esaudienti.
il comando finale che ho eseguito e che ha funzionato è stato:
find -regex "..pippo\.20.*\.log" | sort -r | tail -n+2 | xargs -I {} -exec gzip {}
Alla prossima!
il comando finale che ho eseguito e che ha funzionato è stato:
find -regex "..pippo\.20.*\.log" | sort -r | tail -n+2 | xargs -I {} -exec gzip {}
Alla prossima!
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 11 ospiti