GNU/Linux >> Tutoriales Linux >  >> Linux

¿Desarchivar el archivo mientras se reduce el tamaño del archivo?

Aquí hay otra solución. No le permitirá extraer archivos individuales de un archivo y reducir su tamaño, pero sí le permitirá extraer todos los archivos reduciendo el tamaño del archivo sobre la marcha:

#!/bin/sh

# $1, the first paramter, is the .tar.gz file to unarchive

(
    size=$(wc -c $1)
    offset=0
    bs=4096
    while [[ $size > $offset ]]; do
        dd if=$1 bs=$bs count=1 skip=$offset status=none
        fallocate -p -o $offset -l $bs $1
        offset=$(( $offset + $bs ))
    done
) | tar xz

Guárdelo en un archivo como, p. untar_and_destroy.sh y ejecutar como:

untar_and_destroy.sh whatever.tar.gz

Lo que esto hace es dar parte del .tar.gz archivo a tar, le pide a Linux que desasigne esa parte del archivo y luego repite para la siguiente parte. Cuando termines, ls -l dirá el .tar.gz archivos tiene el mismo tamaño que antes, pero du informará su tamaño como 0. Esto se debe a que el .tar.gz se ha convertido en un archivo disperso, con la misma longitud que antes pero como todos los 0 que no necesitan almacenarse en el disco.

No use esto en producción, ni en ningún lugar donde eliminar ese archivo sería malo. Esto hace que el archivo sea ilegible tan pronto como se inicia, por lo que si algo sale mal, p. se queda sin espacio en el disco duro mientras extrae, no tendrá una segunda oportunidad para ejecutar esto.


Si bien puede resultar poco práctico expandir su almacenamiento principal, tal vez podría extraer el contenido del archivo a un dispositivo de almacenamiento externo.

Alternativamente, genere una lista de archivos en el archivo, luego escriba un script que extraiga algunos de ellos. Mueva esos archivos a la nube, seleccione otro lote para extraer, enjabonar, enjuagar, repetir.

Pero, todas las aplicaciones de archivo que conozco deben tener el archivo original intacto mientras crea un nuevo archivo sin lo que no desea, por lo que el almacenamiento externo será muy, muy útil.


No conozco ninguna herramienta que pueda hacer esto, y no creo que ninguno de los formatos de archivo comunes lo admita.

Una posible solución a su problema sería mantener el archivo en una máquina diferente y canalizarlo a la máquina en la que desea descomprimirlo. Por ejemplo, podría ejecutar este comando en la máquina con el archivo:

cat archive.tar.gz | ssh YOUR_SERVER tar xfz -

El archivo se transmitirá al tar proceso que se ejecuta en el servidor, que lo descomprimirá sin necesidad de que el archivo esté presente en el servidor.


Linux
  1. Cómo dividir un archivo 'tar' grande en varios archivos de cierto tamaño

  2. ¿Diferencia de cálculo de tamaño de directorio?

  3. Comando tar de Linux

  4. Error de alquitrán:EOF inesperado en el archivo

  5. Actualización de un solo archivo en un tar comprimido

Cómo extraer (descomprimir) el archivo Tar Gz

Cómo extraer (descomprimir) el archivo tar.xz

Cómo crear un archivo Tar Gz

Extraiga el archivo tar.gz en Linux

Reducir el tamaño del archivo PDF en Linux

Agregar archivo a archivos tbz