É possível remover os arquivos já descompactados do .tar?

É possível remover os arquivos já descompactados do .tar?

Eu tenho um .tararquivo que ocupa cerca de 70% do meu espaço em disco e precisaria descompactá-lo no mesmo disco. O tarcomando tem a opção de remover os arquivos que já foram descompactados durante o processo para que não ocupem mais espaço? A --deleteopção parece ser capaz de remover arquivos específicos do .tararquivo, mas existe uma maneira de tarsempre remover o último que acabou de ser descompactado? Dessa forma, à medida que o tamanho dos arquivos descompactados aumenta, o .tartamanho diminuirá até zero no final.

Além disso, se o processo for interrompido, ele poderá continuar de onde foi deixado, pois apenas os arquivos descompactados ainda estarão presentes no arquivo .tar.

Responder1

#! /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é usado para reverter a ordem dos arquivos, de modo que o tar não precise reescrever o arquivo inteiro após excluí-lo - o tar só precisa truncar o arquivo. Testei o script em alguns arquivos - ele funciona bem, embora possa ser extremamente lento para arquivos com muitos arquivos pequenos.

"${fname: -1}"extrai o último símbolo de um nome de arquivo - se for uma barra, é um diretório, então nós o ignoramos. Verifique os comentários para uma versão portátil.

informação relacionada