
Tengo un .tar
archivo que ocupa aproximadamente el 70% de mi espacio en disco y necesitaría descomprimirlo en el mismo disco. ¿El tar
comando tiene una opción para eliminar los archivos que ya se han descomprimido durante el proceso para que no ocupen más espacio? La --delete
opción parece poder eliminar archivos específicos del .tar
archivo, pero ¿hay alguna manera de saber tar
si 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 .tar
tamañ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
tac
se 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.