Script para reunir todos os arquivos terminados em .log e criar um arquivo tar.gz

1

Atualmente, estou usando essa linha de script para localizar todos os arquivos de log de uma determinada estrutura de diretórios e copiá-los para outro diretório, onde posso compactá-los facilmente.

find . -name "*.log" -exec cp \{\} /tmp/allLogs/ \;

O problema que tenho é que as informações do diretório / subdiretório são perdidas porque estou copiando apenas o arquivo.

Por exemplo, eu tenho:

./product/install/install.log
./product/execution/daily.log
./other/conf/blah.log

E eu acabo com:

/tmp/allLogs/install.log
/tmp/allLogs/daily.log
/tmp/allLogs/blah.log

E eu gostaria de ter:

/tmp/allLogs/product/install/install.log
/tmp/allLogs/product/execution/daily.log
/tmp/allLogs/other/conf/blah.log
    
por OscarRyz 03.01.2011 / 18:18

4 respostas

3

Qual é o motivo para copiá-los para outro diretório para compactá-los? O seguinte irá criar um arquivo tar compactado fora de todos os arquivos de log, mantendo a estrutura de diretórios em uma única etapa (Supondo que seja executado a partir do diretório raiz:

find . -iname '*.log' -print0 | xargs -0 tar zcf /tmp/test.tar.gz

Por exemplo:

kbrandt@alpine:~/scrap/tar$ find . *.log
.
./foo
./bar
./bar/baz.log
kbrandt@alpine:~/scrap/tar$ find . -iname '*.log' -print0 | xargs -0 tar zcf /tmp/test.tar.gz
#List files in the archive with the -t switch
kbrandt@alpine:~/scrap/tar$ tar -tzf /tmp/test.tar.gz 
./bar/baz.log
    
por 03.01.2011 / 18:59
2

Tente usar o cpio no modo de passagem

find . -name '*.log' | cpio -pdm /tmp/allLogs

    
por 03.01.2011 / 18:36
2
find . -name "*.log" | tar -cz --files-from - -f /path/to/file.tgz
    
por 03.01.2011 / 19:02
0

Que tal filtrar apenas os logs no arquivo:

sudo tar -zcvf archive.tar.gz /path/**/*.log
    
por 03.09.2018 / 16:25