Ist es möglich, eine Datei in einer Zip-Datei zu ersetzen, ohne die alte Datei zu entpacken, die neue Datei hinzuzufügen und wieder zu entpacken?
Grund ist, dass ich eine Zip-Datei habe, die wirklich groß ist. In der Zip-Datei befindet sich eine XML-Datei, die ich manchmal aktualisieren muss. Das Entpacken und erneute Entpacken dauert lange. Ich möchte also nur die eine XML in der Zip-Datei durch ein Skript ersetzen können. Ich habe bereits die Überprüfung auf Updates auf der XML, die ich habe.
Ist es also möglich, nur die eine XML zu ersetzen, ohne sie zu entpacken und erneut zu entpacken?
Tut mir leid, dass ich den Befehl zip verwenden würde, um solche Dinge zu tun, aber das Problem ist, dass das Skript tatsächlich für ein Android-Telefon ist und zip kein Befehl ist, den ich leider verwenden kann. Tut mir leid, dass ich das ausgelassen habe. Ich hätte auf jeden Fall zip verwendet, wenn ich könnte, aber ich habe nur entpacken für Droiden und dann gibt es Teer in der Busybox, aber Teer macht nicht das, was ich brauche
Antworten:
Von Reißverschluss (1) :
Verwenden Sie den
zip
Befehl einfach wie gewohnt, um eine neue ZIP-Datei zu erstellen, die nur diese eine Datei enthält. Der angegebene ZIP-Dateiname ist jedoch das vorhandene Archiv.quelle
zip -r myfolder.zip myfolder
wenn Sie aktualisieren möchtenmyfolder/otherfolder/myfile.txt
, die Datei bearbeiten und ausführenzip -r myfolder.zip myfolder/otherfolder/myfile.txt
Ich habe festgestellt, dass die Linux-
zip
Datei umständlich ist, um eine einzelne Datei in einer Zip-Datei zu ersetzen. Dasjar
Dienstprogramm aus dem Java Development Kit ist möglicherweise einfacher. Betrachten Sie die allgemeine Aufgabe des AktualisierensWEB/web.xml
in einer JAR-Datei (die nur eine Zip-Datei ist):Hier
path/to/dir
ist der Pfad zu einem Verzeichnis, das dasWEB-INF
Verzeichnis enthält (das wiederum enthältweb.xml
).quelle
WEB-INF
der diese Datei enthält?Versuche Folgendes:
Ein Beispiel:
$ zip test.zip test/test.txt updating: test/test.txt (stored 0%)
quelle
updating:
anstattadding:
ob Sie eine Datei in der Zip-Datei aktualisieren möchten. Andernfalls fügen Sie der Zip-Datei Dateien hinzu und ersetzen sie nicht.Ich weiß, dass dies eine alte Frage ist, aber ich wollte das Gleiche tun. Aktualisieren Sie eine Datei im Zip-Archiv. Und keine der obigen Antworten hat mir wirklich geholfen.
Hier ist was ich getan habe. Temporäres Verzeichnis erstellt
abc
. Kopiertfile.zip
zuabc
und die Datei in das Verzeichnis extrahiert. Ich habe die Datei bearbeitet, die ich bearbeiten wollte. Führen Sie dann während Ihresabc
Aufenthalts den folgenden Befehl aus-u
switch sucht nach geänderten / neuen Dateien und fügt sie dem Zip-Archiv hinzu.quelle
Verwenden Sie das Update-Flag:
-u
Beispiel:
Dieser Befehl komprimiert und fügt
myFolder
(und seinen Inhalt) dem hinzuexisting.zip
.Erweiterte Verwendung:
Das Update-Flag vergleicht die eingehenden Dateien tatsächlich mit den vorhandenen und fügt entweder neue Dateien hinzu oder aktualisiert vorhandene.
Wenn Sie daher ein bestimmtes Unterverzeichnis in der Zip-Datei hinzufügen / aktualisieren möchten, aktualisieren Sie einfach die Quelle wie gewünscht und komprimieren Sie dann die gesamte Quelle mit dem
-u
Flag erneut. Nur die geänderten Dateien werden komprimiert.Wenn Sie keinen Zugriff auf die Quelldateien haben, können Sie die Zip-Datei entpacken, die gewünschten Dateien aktualisieren und dann mit dem
-u
Flag erneut komprimieren . Auch hier werden nur die geänderten Dateien komprimiert.Beispiel:
Ursprüngliche Quellstruktur
Aktualisierte Quellstruktur
Verwendung
quelle
Sie können Folgendes verwenden: zip -u file.zip path / file_to_update
quelle
Es gibt auch die Option -f, mit der die Zip-Datei aktualisiert wird. Es kann verwendet werden, um ALLE Dateien zu aktualisieren, die seit der Generierung der Zip-Datei aktualisiert wurden (vorausgesetzt, sie befinden sich an derselben Stelle innerhalb der Baumstruktur in der Zip-Datei).
Wenn Ihre Datei den Namen /myfiles/myzip.zip trägt, müssen Sie nur noch
quelle
Von der Seite der ZIP-Archivstruktur aus - Sie können die ZIP-Datei aktualisieren, ohne sie erneut zu komprimieren. Sie müssen lediglich alle Dateien überspringen, die vor der zu ersetzenden Datei liegen, dann Ihre aktualisierte Datei und dann den Rest der Dateien ablegen. Und schließlich müssen Sie die aktualisierte zentrale Verzeichnisstruktur einfügen. Ich bezweifle jedoch, dass die meisten gängigen Tools dies ermöglichen würden.
quelle
7zip
(7za) kann zum Hinzufügen / Aktualisieren von Dateien / Verzeichnissen verwendet werden:Beispiel: Ersetzen (unabhängig vom Dateidatum) der
MANIFEST.MF
Datei in einer JAR-Datei. Das/source/META-INF
Verzeichnis enthält dieMANIFEST.MF
Datei, die Sie in diejar
(zip) einfügen möchten :7za a /tmp/file.jar /source/META-INF/
Nur aktualisieren (ersetzt das Ziel nicht, wenn die Quelle älter ist)
7za u /tmp/file.jar /source/META-INF/
quelle
Ja es ist möglich.
Auf Linux-basierten Systemen installieren Sie einfach zip und Sie können es in der Befehlszeile aufrufen. Schauen Sie sich die Manpage an: http://linux.die.net/man/1/zip
Nach meiner persönlichen Erfahrung funktioniert dies jedoch besser mit einfachen TAR-Dateien und TAR, wenn dies möglich ist und die Komprimierung nicht so wichtig ist.
quelle