tar --extrai arquivo único (pequeno) de um grande tar.gz, uso de memória/disco?

tar --extrai arquivo único (pequeno) de um grande tar.gz, uso de memória/disco?

Estou ciente de que você pode extrair um único arquivo do tar.

tar -xf file.tar.gz /small/single/file

Pretendo rodar isso em um sistema embarcado com disco/ram limitado. Gostaria de saber como este comando lida com tarballs grandes.

A extração de um único arquivo faz com que todo o tarball seja descompactado na memória? Não me importo de descompactar tudo, mas desde que faça isso com um pequeno buffer.

Digamos que eu tenha 100 MB de RAM disponíveis e 5 MB de espaço em disco disponível. Além disso, /small/single/filetem menos de 5 MB. Além disso, o tarball de origem tem 500 MB. Posso extrair com segurança /small/single/file?

Responder1

A resposta provavelmente depende da implementação que tarvocê está usando, mas, realisticamente, esperaria que a maioria das implementações processasse o tarball usando um buffer relativamente pequeno. Usando GNU tarem um bzip2tarball compactado de 2GiB, para extrair um único arquivo, recebo

64.07user 4.84system 2:53.45elapsed 97%CPU (0avgtext+0avgdata 4664maxresident)k
4046976inputs+8outputs (0major+1194minor)pagefaults 0swaps

(usando GNU time). Como você pode ver, o tamanho máximo do residente é inferior a 5 MiB.

Responder2

Para minimizar o uso de RAM/disco, eu recomendaria usar pipes como este:

gzip -dc file.tar.gz| tar -f - /small/single/file

informação relacionada