Como contar o número de arquivos em arquivos “.tar” dentro de outro arquivo aninhado “.tar” sem extração?

2

Existem muitas soluções por aí na contagem de arquivos dentro de um arquivo .tar . Mas eu não encontrei uma solução para contar o número de arquivos em .tar arquivos dentro de outro arquivo .tar sem extração.

Por exemplo:

  • big.tar contém

    • a.tar
    • b.tar
    • c.sh

Posso extrair big.tar e, em seguida, tar -tvf desses a.tar e b.tar , mas gostamos de saber se existe uma solução melhor no Linux?

    
por chz 08.04.2015 / 08:01

1 resposta

0

A resposta curta é não.

A maneira correta seria algo como

$ tar -t -f <(tar -x -O -f big.tar a.tar) | wc -l

ou

$ tar -x -O -f big.tar a.tar | tar -t -f - | wc -l

Isso extrairá a.tar de big.tar e alimentará isso diretamente em outro processo tar sem primeiro extrair para um arquivo. Observe que ainda está extraindo a.tar , apenas não gravando no disco.

É possível extrair várias camadas de tar de uma só vez, mas você teria que escrever um programa para fazer isso, pois não acho que alguém já tenha escrito uma, e não seria empreendimento trivial.

Edit: Você pode modificar o script de shell acima se quiser contar os arquivos em todos os sub-pacotes:

tar -t -f big.tar | egrep '\.tar$' | while read f
do
    tar -t -f <(tar -x -0 -f big.tar "$f")
done | wc -l

Ou com o GNU Parallel:

tar -t -f big.tar | egrep '\.tar$' | parallel "tar -t -f <(tar -x -0 -f big.tar {})" | wc -l
    
por 27.11.2015 / 07:55

Tags