
Eu tenho um .tar
arquivo que ocupa cerca de 70% do meu espaço em disco e precisaria descompactá-lo no mesmo disco. O tar
comando tem a opção de remover os arquivos que já foram descompactados durante o processo para que não ocupem mais espaço? A --delete
opção parece ser capaz de remover arquivos específicos do .tar
arquivo, mas existe uma maneira de tar
sempre remover o último que acabou de ser descompactado? Dessa forma, à medida que o tamanho dos arquivos descompactados aumenta, o .tar
tamanho 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.