¿Cómo comprimo archivos en el lugar?

20

Tengo una máquina con un 90% de uso de disco duro. Quiero comprimir sus más de 500 archivos de registro en un nuevo archivo más pequeño. Sin embargo, el disco duro es demasiado pequeño para mantener tanto los archivos originales como los comprimidos.

Entonces, lo que necesito es comprimir todos los archivos de registro en un solo archivo nuevo uno por uno, eliminando cada original una vez comprimido.

¿Cómo puedo hacer eso en Linux?

zen
fuente
Duplicado: superuser.com/questions/378230
Hermann

Respuestas:

18

gzipo bzip2comprimirá el archivo y eliminará el no comprimido automáticamente (este es su comportamiento predeterminado).

Sin embargo, tenga en cuenta que durante el proceso de compresión, ambos archivos existirán.

Si desea comprimir archivos de registro (es decir, archivos que contienen texto), puede preferirlo bzip2, ya que tiene una mejor relación para los archivos de texto.

bzip2 -9 myfile       # will produce myfile.bz2

Comparación y ejemplos:

$ ls -l myfile
-rw-rw-r-- 1 apaul apaul 585999 29 april 10:09 myfile

$ bzip2 -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 115780 29 april 10:09 myfile.bz2

$ bunzip2 myfile.bz2

$ gzip -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 146234 29 april 10:09 myfile.gz

ACTUALIZACIÓN como @Jjoao me dijo en un comentario, curiosamente, xzparece tener una mejor relación en archivos sin formato con sus opciones predeterminadas:

$ xz -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 109384 29 april 10:09 myfile.xz

Para obtener más información, aquí hay un punto de referencia interesante para diferentes herramientas: http://binfalse.de/2011/04/04/comparison-of-compression/

Para el ejemplo anterior, lo uso -9para una mejor relación de compresión, pero si el tiempo necesario para comprimir datos es más importante que la relación, será mejor que no lo use (use una opción más baja, es decir -1, o algo intermedio).

apaul
fuente
2
+1; Solo curiosidad: ¿podrías agregar un xz myfile?
JJoao
2
@JJoao gracias! Es interesante, no estoy acostumbrado a usarlo xz, pero lo consideraré ahora. Ver la actualización de mi publicación.
apaul
3
Por favor no lo hagas xz -9. Aumenta enormemente la memoria requerida para la compresión / descompresión, sin mejorar significativamente la relación de compresión. La página de manual incluso dice (énfasis en el suyo) "Específicamente, no es una buena idea usar ciegamente -9 para todo lo que suele ser con gzip (1) y bzip2 (1)". El valor predeterminado xz -6es lo suficientemente bueno, e incluso xz -0/ xz -1generalmente se comprime mejor que gzip -9.
user49740
@ user49740 tienes razón. Raramente lo uso -9, pero lo usé aquí porque quería hacer algún tipo de punto de referencia para la relación de compresión "en la misma escala". Pero una vez más, tienes toda la razón: es una mala idea usar a ciegas -9.
Apaul
15

Descubrí una solución de alquitrán por mí mismo.
Elimina un solo archivo después de comprimirlo en el archivo de destino.
Sin embargo, la velocidad de compresión no es bastante rápida. El comando se ve así:

tar -zcvf my_log.tar.gz *.log --remove-files
zen
fuente
1
Bueno, viejo alquitrán. +1
Aaron Hall
1

En complemento a @apaul, enfatizo que la compresión de archivos individualmente

 bzip2 *.log.*

(reemplazar bzip2 por gzip, xz, o el archivo zip que prefiera) puede ser importante:

De esta manera, aún puede ver ( bzcat file.bz2), buscar ( bzgrep file.bz2), editar ( vi file.bz2) el archivo comprimido y eliminar los anteriores cuando sea necesario.

JJoao
fuente
1

Estaba tratando de hacer esto en la versión BSD de tar. En este caso, la opción --remove-files no está disponible. Lo que terminé haciendo (y trabajé) fue:

find folder_to_tar -type f -exec tar --append --file=output_tar_file.tar {} \; -exec rm -v {} \;
pgilmon
fuente
Por cierto, la versión BSD es lo que obtienes por defecto si estás usando MacOS
pgilmon