¿Hay alguna manera de estimar cuánto espacio ocupará un archivo o directorio de un tamaño determinado después de comprimirlo con tar y bzip2?

¿Hay alguna manera de estimar cuánto espacio ocupará un archivo o directorio de un tamaño determinado después de comprimirlo con tar y bzip2?

Debido a un cambio de distribución inminente, me gustaría hacer una copia de seguridad de mi directorio personal. Sin embargo, mi directorio personal tiene 29 gigabytes. Me gustaría saber cuánto espacio ocuparía esto después de comprimirlo tar cvjf home.tar /home. ¿Existe alguna forma que pueda utilizar para determinar el tamaño después de la compresión?

Respuesta1

La herramienta está tar( bzip2implícitamente involucrada debido a que jla usó) canalizada a wc(que es una herramienta estándar (POSIX) para contar bytes). El siguiente comando imprimirá el tamaño en bytes:

tar cj /home | wc -c

El comando realmente hace (y cito otra respuesta aquí) "todo el trabajo del programa de compresión, sin escribir el archivo final, lo que sería una pérdida de tiempo"; pero si realmente quieres saberlo, esta es la única manera firme.


Puede mejorar el enfoque general de esta manera:

tar cj /home | tee home.tbz2 | wc -c
  • Si tiene suerte y el espacio que tiene home.tbz2resulta ser suficiente, no recibirá ningún error teey el archivo terminará con un tamaño igual al que wc -cse informará.
  • De lo contrario, teeinformará no space left, pero seguirá escribiendo en su salida estándar. wc -cle dirá qué tamaño tendría el archivo. El archivo real (incompleto) será más pequeño y deberás eliminarlo después.

Mientras tarlo usa, ves posible que se pierda un no space leftmensaje. Aún así, puedes saber qué sucedió comparando el resultado obtenido wc -ccon el tamaño real de home.tbz2. En Bash puedes recuperar el estado de salida de teewith ${PIPESTATUS[1]}.

Respuesta2

Lamentablemente no. La única forma de ver el tamaño de un archivo comprimido es crearlo. No existe ninguna herramienta que haga esto, ya que la herramienta haría todo el trabajo del programa de compresión, sin escribir el archivo final, lo que sería una pérdida de tiempo.

Quizás debería considerar dividir sus datos en partes manejables y crear varios archivos. Esto le permitirá dividir la gran cantidad de tiempo que llevará archivar 29 GB en porciones más pequeñas.

Respuesta3

No es posible saber con certeza a qué tamaño se comprimen los datos sin comprimirlos realmente. Lo que puede hacer: obtenga una suposición fundamentada en función del contenido que tenga en su directorio de inicio. No conozco ninguna herramienta para hacer esto automáticamente, pero no es un proceso difícil.

Muchos formatos de archivos modernos ya están comprimidos, lo que significa que volver a comprimirlos le dará poca o ninguna ganancia (o negativa). Para este tipo de datos, es mejor omitir la compresión y simplemente copiarlos o archivarlos tal como están. Ejemplos de esto serían videos comprimidos (mp4, webm, mov, etc.), imágenes comprimidas (jpeg, png, etc.), archivos existentes (zip, rar, gz, bz2, etc.) y más.

Los archivos de texto generalmente se comprimen bastante bien, especialmente si hay muchos datos repetidos (es decir, archivos de registro). Podría intentar muestrear un subconjunto de archivos para ver cómo se comprimen y usarlo como una estimación o usar algo así como el 50% como una estimación aproximada.

Finalmente, vea qué parte de sus datos se compone de cada tipo y multiplíquelo por su porcentaje estimado para obtener una estimación de su tamaño final. Por ejemplo, si 20 GB de sus datos son datos comprimidos y 9 GB son archivos de texto, el tamaño final de sus datos comprimidos probablemente oscilará entre 21 GB y 25 GB.

información relacionada