Gibt es eine Möglichkeit, eine Datei in einem tar.gz-Archiv hinzuzufügen / zu aktualisieren? Grundsätzlich habe ich ein Archiv, das eine Datei unter enthält, /data/data/com.myapp.backup/./files/settings.txt
und ich möchte diese Datei aus dem Archiv (bereits fertig) ziehen und sie nach erfolgter Bearbeitung wieder in das Archiv zurückschieben. Wie kann ich das erreichen? Ist es problematisch wegen der .
im weg?
73
.DS_Store
und dann das Verzeichnis neu tarieren.Antworten:
Das Dateiformat tar besteht nur aus einer Reihe von Dateien, die mit einigen Kopfzeilen verknüpft sind. Es ist keine sehr komplizierte Aufgabe, sie zu zerreißen, Ihre Inhalte einzulegen und wieder zusammenzusetzen. Davon abgesehen, beschrieben Jander wie Teer als ein Programm nicht die Nutzenfunktionen hat , dies zu tun und es gibt zusätzliche Komplikationen mit Kompression, die sowohl vor als auch nach einer Änderung.
Es gibt jedoch Werkzeuge für den Job! Es gibt mindestens zwei Systeme, mit denen Sie ein komprimiertes tar-Archiv in einen Ordner zurückschleifen und dann Ihre Änderungen im Dateisystem vornehmen können. Wenn Sie fertig sind, hängen Sie den Ordner aus und Ihr komprimiertes Archiv ist bereit zum Rollen.
Die erste Option wäre das Archivierungsprojekt für FUSE . Hier ist ein Tutorial dazu . Ihr System verfügt wahrscheinlich bereits über FUSE. Wenn dies nicht der Fall ist, sollte Ihre Distribution eine Option dafür haben.
Die andere Option ist Tarfs . Es ist einfacher zu benutzen , aber ich habe gehört, dass es Probleme mit der Beschädigung von bzip2-Archiven gibt, so dass Sie dies vielleicht zuerst gründlich testen können.
quelle
Um Ihre Datei aus Ihrem Archiv zu ziehen, können Sie verwenden
tar xzf archive.tar.gz my/path/to/file.txt
. Beachten Sie, dass auch die Verzeichnisse im Pfad der Datei erstellt werden. Verwenden Sietar t
(dhtar tzf archive.tar.gz
), um die Dateien im Archiv aufzulisten.tar
unterstützt keine "In-Place" -Updatierung von Dateien. Sie können jedoch Dateien an das Ende eines Archivs anfügen, auch wenn sie denselben Pfad haben wie eine Datei, die sich bereits im Archiv befindet. In diesem Fall befinden sich beide Kopien der Datei im Archiv, und die später hinzugefügte Datei überschreibt die frühere. Der zu verwendende Befehl isttar r
(odertar u
nur Dateien hinzuzufügen, die neuer als das Archiv sind) der zu verwendende Befehl. Das.
im Weg sollte kein Problem sein.Es gibt jedoch einen Haken: Sie können nicht zu einem komprimierten Archiv hinzufügen. Sie müssten also Folgendes tun:
Das ist wahrscheinlich nicht das, was Sie hören möchten, da es bedeutet, das gesamte Archiv zweimal neu zu schreiben. Wenn es sich nicht um ein sehr großes Archiv handelt, ist es möglicherweise besser, das Ganze zu entpacken und es nach der Bearbeitung erneut zu tarieren. Alternativ können Sie ein nicht komprimiertes Archiv verwenden.
quelle
tar
. Tar als Dateiformat ist eigentlich sehr gut zugänglich. Sie könnten leicht ein Skript schreiben, um den Inhalt selbst zu aktualisieren, aber es gibt andere Tools, die dies bereits tun .gzip -dc archive.tar.gz | tar -r data/data/com.myapp.backup/./files/settings.txt | gzip >archive_new.tar.gz
Tar sollte ursprünglich für Bänder verwendet werden, daher ist das "Ersetzen" von Dateien im Design nicht wirklich enthalten. Sie können jedoch --delete verwenden, um die Datei aus dem ursprünglichen Teer zu löschen, und dann -u, um den Teer zu aktualisieren und die Datei erneut hinzuzufügen. Dies kann etwas dauern, da tar das Archiv intern neu organisieren muss.
quelle
Auf meinem Linux x86_64 GNU / Linux verwende ich dazu einfach den folgenden Befehl:
Dieser Befehl bewirkt die Erstellung eines komprimierten Archivs unter
/path
Verwendung einer Liste von Dateien, die in der Datei enthalten sindlist.txt
.quelle
/path/archive.tar
, anstatt diese Datei hinzuzufügen / zu aktualisieren.