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