Wie setze ich einen getöteten Tar-Befehl fort?


11

Ich machte ein: tar -cvfund ich musste es mit töten ctrl-C. Ich weiß, ich hätte eine machen Ctrl-Zund dann die Aufgabe wieder in den Vordergrund bringen sollen ... aber es ist nicht die Geschichte.

Kann ich ab dem Punkt fortfahren, an dem ich die Aufgabe gestoppt habe?


Befindet sich am Zielort eine unvollständige TAR-Datei?
Karthik T

Ja, es gibt einen unvollständigen Teer.
mthpvg

Antworten:


10

Diese Methode erstellt Ihr Tar-Archiv neu und hängt das fertige Teil an die vorhandene Datei an. Dies kann nützlich sein, wenn Sie über eine Netzwerkverbindung sichern. Sie werden wahrscheinlich zu einem beschädigten Archiv führen, wenn sich Daten in Ihren INFILES geändert haben. Stellen Sie sicher, dass Sie Ihr Archiv nach Abschluss testen.

Ändern Sie INFILES und OUTFILE in der folgenden Zeile in die richtigen Namen.

INFILES="my folder"; OUTFILE="archive.tgz"; SIZE="$(wc -c < $OUTFILE)"; tar -cz --to-stdout "$INFILES" | tail -c +$(($SIZE+1)) >> "$OUTFILE"

Erläuterung:

SIZE="$(wc -c < $OUTFILE)" # Ermittelt die aktuelle Größe des Archivs.

tar -cz --to-stdout "$INFILES" |# Beginnen Sie mit der Erstellung des Archivs und senden Sie die Ausgabe an den tailBefehl.

tail -c +$(($SIZE+1)) >> # Ignorieren Sie die Daten vor $ SIZE + 1 und setzen Sie den Rest des Archivs $ OUTFILE fort.


2
Ich gehe davon aus, dass dies schneller ist als nur ein Neustart des tar-Prozesses, da er eigentlich nichts auf die Festplatte schreibt.
Tyler

2

Die beste Lösung wäre, die TAR-Datei zu löschen und den mit vorangestellten nohupund angehängten Prozess neu zu starten &. Alternativ können Sie dies ausführen tar -tfvund als Ausschluss für das neue verwenden tar -cvf.


2
tar -cvfüberschreibt die vorhandene Datei. Meinten Sie tar -rvf? Außerdem war die letzte Datei, die in das Archiv geschrieben wurde, wahrscheinlich unvollständig.
Gilles 'SO - hör auf böse zu sein'

Die Idee ist also, eine Liste der Dateien zu erstellen, die sich bereits im Tarball befinden, abzüglich der letzten, die wahrscheinlich unvollständig ist. Und dann ein tar -rvf?
mthpvg

2

Du kannst nicht; Sie müssen nur von vorne anfangen.


0

Was ich mache, wenn ich ein unvollständiges tarArchiv habe, erstelle ich eine Liste der Dateien im Archiv:

tar tf archive.tar | sed -e '/\/$/d' -e x -e '/^$/d' >files-done

Der sedBefehl löscht alle Zeilen mit einem abschließenden Schrägstrich: Dies sind Verzeichnisse, keine Dateien, und wir möchten die Verzeichnisse erneut sichern und nur die Dateien in den Verzeichnissen überspringen, die wir bereits im ersten tar-Archiv haben. Außerdem lassen wir sedden letzten Dateinamen löschen, da dieser höchstwahrscheinlich nur teilweise ausgegeben wurde, sodass wir ihn erneut archivieren werden.

Übergeben Sie die files-doneListe dann einfach über die Option -X an einen neuen tarBefehl:

tar cfvX archive2.tar files-done SOURCEDIR

Stellen Sie sicher, dass Sie für den neuen Befehl tar einen anderen Ausgabedateinamen verwenden, da Sie sonst Ihr Teilarchiv überschreiben. Versuchen Sie nicht, direkt an das beschädigte Teerarchiv anzuhängen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.