Como concatear logs rotacionados juntos novamente

1

Como concatenar novamente os registros girados para criar o arquivo original?

huali-access.log     huali-access.log.15  huali-access.log.21  huali-access.log.28  huali-access.log.34  huali-access.log.40  huali-access.log.47  huali-access.log.6
huali-access.log.1   huali-access.log.16  huali-access.log.22  huali-access.log.29  huali-access.log.35  huali-access.log.41  huali-access.log.48  huali-access.log.7
huali-access.log.10  huali-access.log.17  huali-access.log.23  huali-access.log.3   huali-access.log.36  huali-access.log.42  huali-access.log.49  huali-access.log.8
huali-access.log.11  huali-access.log.18  huali-access.log.24  huali-access.log.30  huali-access.log.37  huali-access.log.43  huali-access.log.5   huali-access.log.9
huali-access.log.12  huali-access.log.19  huali-access.log.25  huali-access.log.31  huali-access.log.38  huali-access.log.44  huali-access.log.50
huali-access.log.13  huali-access.log.2   huali-access.log.26  huali-access.log.32  huali-access.log.39  huali-access.log.45  huali-access.log.51
huali-access.log.14  huali-access.log.20  huali-access.log.27  huali-access.log.33  huali-access.log.4   huali-access.log.46  huali-access.log.52
    
por steveyang 20.02.2013 / 04:36

5 respostas

3

assim:

cat huali-access.log* > merged-huali-access.log

ou para ter certeza de que é cronologicamente em ordem:

echo -n "" > merged-huali-access.log # creating new file and making sure its empty
for i in {1..52}
do
    cat huali-access.log.${i} >> merged-huali-access.log
done
cat huali-access.log >> merged-huali-access.log
    
por 20.02.2013 / 04:41
8

Se os arquivos tiverem os horários de modificação corretos definidos (por exemplo, se você não copiou os arquivos sem ter o cuidado de preservar os horários de modificação), poderá usar

 cat $(ls -t huali-access.log*) > output.log

A opção -t em ls irá ordená-lo por hora de modificação.

    
por 20.02.2013 / 04:52
0

De @ mauro.stettler, Corrigido problema com a ordem dos arquivos, também tornou genérico:

for LOG in *.log; do 
    ( for i in {100..1}; do 
       F=${LOG}.${i}; 
       [ -e $F ] && cat $F; 
    done ; cat ${LOG} ) > aggregated_${LOG};
done

Ou você pode usar em logs de acesso, não tão genéricos quanto os outros que você pode aplicar a qualquer registro, e não funcionará com meses diferentes:

cat accesslog.log* | sort -nk 4 > aggregated_accesslog.log
    
por 05.03.2015 / 22:46
0

Isto irá concatenar todos os arquivos log * (incluindo o gzipped) para log.all Basta substituir "log" para usá-lo

l='log'; test -f ${l}.all && rm ${l}.all; ls -1tr ${l}* | xargs zcat -f >> $l.all
    
por 02.07.2015 / 21:51
-1
ls -1t *.access.log* | xargs zcat >  access.all.log
    
por 05.03.2015 / 23:29