¿Es posible eliminar los archivos ya descomprimidos de .tar?

¿Es posible eliminar los archivos ya descomprimidos de .tar?

Tengo un .tararchivo que ocupa aproximadamente el 70% de mi espacio en disco y necesitaría descomprimirlo en el mismo disco. ¿El tarcomando tiene una opción para eliminar los archivos que ya se han descomprimido durante el proceso para que no ocupen más espacio? La --deleteopción parece poder eliminar archivos específicos del .tararchivo, pero ¿hay alguna manera de saber tarsi siempre se debe eliminar el último que se acaba de descomprimir? De esta manera, a medida que aumenta el tamaño de los archivos descomprimidos, el .tartamaño disminuirá hasta llegar a cero al final.

Además, si el proceso se interrumpe, se podría continuar desde donde se dejó, ya que solo los archivos descomprimidos seguirían presentes en el archivo .tar.

Respuesta1

#! /bin/bash
test ! -e "$1" && echo "Run with a tar archive" && exit
tar --list -f "$1" | tac | while IFS= read -r fname; do
    test "${fname: -1}" = '/' && continue # skip directories
    tar --extract -f "$1" "$fname" || exit 1 # let's stop in case we can't extract a file
    tar --delete  -f "$1" "$fname" || exit 2 # just in case
done
test "$?" = "0" && tar xf "$1" # restore directories timestamps

tacse utiliza para invertir el orden de los archivos, de modo que tar no necesite reescribir todo el archivo después de eliminar un archivo; tar solo necesita truncar el archivo. Probé el script en un par de archivos; funciona bien, aunque puede ser extremadamente lento para archivos con muchos archivos pequeños.

"${fname: -1}"extrae el último símbolo de un nombre de archivo; si es una barra diagonal, es un directorio, por lo que lo omitimos. Consulte los comentarios para obtener una versión portátil.

información relacionada