![Existe uma maneira de estimar quanto espaço um arquivo ou diretório de determinado tamanho ocupará após ser compactado com tar e bzip2?](https://rvso.com/image/1607088/Existe%20uma%20maneira%20de%20estimar%20quanto%20espa%C3%A7o%20um%20arquivo%20ou%20diret%C3%B3rio%20de%20determinado%20tamanho%20ocupar%C3%A1%20ap%C3%B3s%20ser%20compactado%20com%20tar%20e%20bzip2%3F.png)
Devido a uma mudança iminente de distribuição, gostaria de fazer backup do meu diretório pessoal. No entanto, meu diretório inicial tem 29 gigabytes. Gostaria de saber quanto espaço isso ocuparia depois de ser compactado com tar cvjf home.tar /home
. Existe uma maneira que eu possa usar para determinar o tamanho após a compactação?
Responder1
A ferramenta é tar
( bzip2
implicitamente envolvida por causa de j
você usada) canalizada para wc
(que é uma ferramenta padrão (POSIX) para contar bytes). O seguinte comando imprimirá o tamanho em bytes:
tar cj /home | wc -c
O comando realmente faz (e estou citando outra resposta aqui) “todo o trabalho do programa de compactação, sem escrever o arquivo final, o que seria uma perda de tempo”; mas se você realmente quer saber, então este é o único caminho firme.
Você pode melhorar a abordagem geral assim:
tar cj /home | tee home.tbz2 | wc -c
- Se você tiver sorte e o espaço que você tem
home.tbz2
for suficiente, você não receberá nenhum errotee
e o arquivo terá um tamanho igual ao quewc -c
será relatado. - Caso contrário,
tee
reportaráno space left
, mas continuará gravando em seu stdout.wc -c
dirá o tamanho do arquivo. O arquivo real (incompleto) será menor e você deverá excluí-lo posteriormente.
Durante o uso tar
, v
você pode perder uma no space left
mensagem. Ainda assim, você pode dizer o que aconteceu comparando a saída obtida wc -c
com o tamanho real do arquivo home.tbz2
. No Bash você pode recuperar o status de saída tee
with ${PIPESTATUS[1]}
.
Responder2
Infelizmente não. A única maneira de ver o tamanho de um arquivo compactado é criá-lo. Não existe nenhuma ferramenta que faça isso, pois a ferramenta estaria fazendo todo o trabalho do programa de compressão, sem escrever o arquivo final, o que seria uma perda de tempo.
Talvez você deva considerar dividir seus dados em partes gerenciáveis e criar vários arquivos. Isso permitirá que você divida o grande tempo necessário para arquivar 29 GB em fatias menores.
Responder3
Não é possível saber com certeza qual tamanho os dados serão compactados sem realmente compactá-los. O que você pode fazer é obter uma estimativa fundamentada com base no conteúdo que você tem em seu diretório inicial. Não conheço nenhuma ferramenta para fazer isso automaticamente, mas não é um processo difícil.
Muitos formatos de arquivo modernos já estão compactados, o que significa que executá-los novamente pela compactação proporcionará pouco ou nenhum ganho (ou negativo). É melhor para esse tipo de dados ignorar a compactação e simplesmente copiá-los ou arquivá-los como estão. Exemplos disso seriam vídeo compactado (mp4, webm, mov, etc), imagens compactadas (jpeg, png, etc), arquivos existentes (zip, rar, gz, bz2, etc) e muito mais.
Os arquivos de texto geralmente serão compactados razoavelmente bem, especialmente se houver muitos dados repetidos (ou seja, arquivos de log). Você pode tentar amostrar um subconjunto de arquivos para ver como eles são compactados e usar isso como uma estimativa ou usar algo como 50% como uma estimativa aproximada.
Por fim, veja que parte dos seus dados é composta por cada tipo e multiplique pela porcentagem estimada para obter uma estimativa do tamanho final. Por exemplo, se 20 GB de seus dados forem dados compactados e 9 GB forem arquivos de texto, o tamanho final dos dados compactados provavelmente variará de 21 GB a 25 GB.