Ist es möglich, die bereits entpackten Dateien aus .tar zu entfernen?

Ist es möglich, die bereits entpackten Dateien aus .tar zu entfernen?

Ich habe eine .tarDatei, die etwa 70 % meines Speicherplatzes einnimmt, und ich müsste sie auf dieselbe Festplatte entpacken. Verfügt der tarBefehl über eine Option zum Entfernen der Dateien, die während des Vorgangs bereits entpackt wurden, damit sie den Speicherplatz nicht mehr beanspruchen? Die --deleteOption scheint bestimmte Dateien aus dem Archiv entfernen zu können .tar, aber gibt es eine Möglichkeit, anzugeben, tardass immer die letzte Datei entfernt werden soll, die gerade entpackt wurde? Auf diese Weise .tarwürde die Größe der entpackten Dateien mit zunehmender Größe am Ende bis auf Null abnehmen.

Darüber hinaus könnte der Vorgang bei einer Unterbrechung dort fortgesetzt werden, wo er aufgehört hat, da in der Datei nur noch die entpackten Dateien vorhanden wären .tar.

Antwort1

#! /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

tacwird verwendet, um die Reihenfolge der Dateien umzukehren, sodass tar nach dem Löschen einer Datei nicht das gesamte Archiv neu schreiben muss – tar muss das Archiv nur kürzen. Ich habe das Skript an einigen Dateien getestet – es funktioniert gut, kann jedoch bei Archiven mit vielen kleinen Dateien extrem langsam sein.

"${fname: -1}"extrahiert das letzte Symbol eines Dateinamens - wenn es ein Schrägstrich ist, handelt es sich um ein Verzeichnis, also überspringen wir es. In den Kommentaren finden Sie eine portable Version.

verwandte Informationen