Encontre arquivos, grep para o padrão, encabece os 10 primeiros e então tar os

1

Eu estou procurando um padrão em arquivos usando find, então eu só quero os dez primeiros que eu encontrar e tar esses.

find /var/log/file | xargs grep "pattern" | head -n10​ | tar -czvf tarfile.tgz

Eu também tentei xargs the tar . Isso também resulta em erros. O que estou fazendo errado?

Aqui está o que vejo no primeiro comando:

tar: Cowardly refusing to create an empty archive
Try 'tar --help' or 'tar --usage' for more information.
    
por user53029 02.09.2016 / 08:12

2 respostas

3

Você pode usar

tar cvzf files.tar.gz $(find /var/log/file -type f -exec grep -l "pattern" {} + | \
head -n10)

aqui, grep -l imprimirá apenas arquivos que correspondam ao padrão.

Você teria que usar a opção -P de tar se estiver recebendo um erro como

error tar: Removing leading '/' from member names

veja man tar

-P, --absolute-names
     don't strip leading '/'s from file names

Ou você pode especificar -C para alterar o diretório, em vez de especificar o caminho completo do arquivo.

    
por 02.09.2016 / 08:20
2

tente

tar cvzf tarfile.tgz $(find /var/log/file | grep "pattern" | head -n10 )

onde

  • código dentro de $( ) cria uma lista de 10 arquivos.

ao contrário do cpio, o tar não aceita uma lista de arquivos no stdin.

    
por 02.09.2016 / 08:19

Tags