Gibt es eine Möglichkeit, Dateien in einer ZIP-Datei zu bearbeiten, ohne sie vorher explizit zu extrahieren?

47852
austin

Manchmal muss ich eine .zip- oder .jar-Datei ändern, daher verschiebe ich die Datei normalerweise nach /tmp, extrahiere alle Dateien mit unzip, bearbeite ein paar Dateien und re-zip die Dateien dann erneut. Das funktioniert, kann aber langweilig sein. Gibt es ein Hilfsprogramm oder ein Shell-Skript, mit dem ich eine Datei innerhalb einer ZIP-Datei bearbeiten kann, ohne explizit aufzurufen unzipund zip(auch wenn es sich nur um einen Wrapper um diese Befehle handelt)?

38
Nur neugierig, ob die Antwort auf .jar-Dateien funktioniert? (Ich habe es dort nicht getestet.) beroe vor 10 Jahren 0
@beroe Es sollte da der zip-Komprimierungsalgorithmus verwenden. Das war eigentlich meine Hauptmotivation, nach einer Lösung zu suchen, weil ich WAR-Dateien auf einem App-Server bereitgestellt hatte, die nicht nach neuem Packen und erneutem Bereitstellen nur zum Ändern einer einzelnen Datei Lust hatten. austin vor 10 Jahren 0
Großartig. Ich werde versuchen, die Funktion so zu korrigieren, dass die Verzeichnisstruktur im Archiv erhalten bleibt. Momentan denke ich, dass es nur für Dateien auf Root-Ebene funktioniert, aber für meine Zwecke sind Unterordner nützlicher. beroe vor 10 Jahren 0
@beroe Das ist ziemlich cool. Bevor ich das fragte, wollte ich ein Python-Skript programmieren, um eine Psudo-Shell "in" der zip-Datei zu starten, um beliebige Befehle auszuführen. Ich würde mich für das interessieren, was Sie hergebracht haben. austin vor 10 Jahren 0
OK, fügte eine weitere Lösung hinzu, um Unterordner zu unterstützen, und es funktioniert in * limitierten * Tests. beroe vor 10 Jahren 0

8 Antworten auf die Frage

50
jesjimher

Vim unterstützt die transparente Bearbeitung von Dateien in ZIP-Dateien. Einfach ausführen:

vim file.zip

Im zip-Archiv wird eine Liste der Dateien angezeigt. Wählen Sie die zu bearbeitende aus, ändern Sie die gewünschte Einstellung und beenden Sie das Fenster mit: x

Wenn vimantwortet mit:

Änderungen können nicht vorgenommen werden, "modifizierbar" ist deaktiviert

.. einfach ausführen :set modifiableoder :set ma(Quelle: https://stackoverflow.com/questions/5745506/vim-modifiable-is-off )

Die Standard-ZIP-Unterstützung in vim erlaubt übrigens nur die Bearbeitung von ZIP-Codes auf einer Ebene. Wenn Sie ZIPs innerhalb von ZIPs bearbeiten müssen, sollten Sie [dieses vim-Plugin] (http://www.vim.org/scripts/script.php?script_id=2206) verwenden. jesjimher vor 10 Jahren 1
Gleiches gilt für Emacs. Mike vor 8 Jahren 1
Dies sollte als die richtige Antwort markiert werden Martijn Burger vor 8 Jahren 3
Lebensretter. wirklich cooles Feature von Vim und auch ziemlich unerwartet Peter Perháč vor 7 Jahren 2
15
beroe

Kennen Sie den Namen der Datei im Archiv, bevor Sie sie entpacken? Sie können eine Funktion zum Entpacken /tmp, Bearbeiten und Aktualisieren der ZIP- Datei erstellen :

zipedit(){ echo "Usage: zipedit archive.zip file.txt" unzip "$1" "$2" -d /tmp  vi /tmp/$2 && zip -j --update "$1" "/tmp/$2"  } 

Wie es heißt, ist die Verwendung:

zipedit myarchive.zip myfile.txt 

Dies entpackt die benannte Datei aus dem Archiv, speichert sie in /tmp, bearbeitet sie viund fügt sie dem Archiv zurück, während der Pfad "weggeworfen" wird. Fügen Sie Ihrem .bash_profile hinzu, vorausgesetzt, dass bash...

BEARBEITEN: Unten ist eine Version, die mit Unterordnern im Archiv arbeitet ... Beachten Sie, verwenden Sie keinen Schrägstrich vor dem Namen des Ordners (verwenden Sie also myfolder/file.txtnicht /myfolder/file.txt). Wenn Sie eine Datei bearbeiten, die noch nicht im Archiv vorhanden ist, wird sie für Sie erstellt. Auch nicht sicher, ob es mit dem absoluten Pfad zur ZIP-Datei funktioniert. Am besten bleiben Sie bei Verwandten.

zipedit(){ echo "Usage: zipedit archive.zip folder/file.txt" curdir=$(pwd) unzip "$1" "$2" -d /tmp  cd /tmp vi "$2" && zip --update "$curdir/$1" "$2"  # remove this line to just keep overwriting files in /tmp rm -f "$2" # or remove -f if you want to confirm cd "$curdir" } 

Danke für die Frage. Ich werde wahrscheinlich auch dieses verwenden!

Noch eine Bearbeitung: Ungetestet, aber ich lese das vimund emacswerde beide JAR-Dateien direkt bearbeiten?

Ich kann bestätigen, dass vim hervorragend für die Bearbeitung von zip-Dateien von der Kommandozeile unter Linux aus funktioniert. Vielen Dank für den Tipp! Thomas Bindzus vor 10 Jahren 0
4
terdon

Kurze Antwort: NEIN

Wenn es ein Wrapper ist, Sie werden fordern diese Befehle. Das Beste, was ich mir vorstellen kann, ist das Öffnen der Datei mit file-rollereiner X-Umgebung, die je nach Konfiguration mit einem einfachen Doppelklick funktioniert. Sie können dann auf die komprimierte Datei doppelklicken, um sie zu öffnen. Anschließend können Sie sie bearbeiten:

$ file-roller b3.zip 

Wenn Sie Ihre bearbeitete Datei speichern, sollten Sie diesen Dialog erhalten:

Sie könnten auch ein Skript dafür erstellen, aber das wird kompliziert, wenn Sie komprimierte Archive mit mehreren Dateien haben. Lass es mich wissen, wenn es das ist, was du brauchst und ich könnte vielleicht etwas kochen.

0
Proctor

Gemäß der Manpage für zip(Online-Version als Referenz: http://linux.die.net/man/1/zip ) hat der zipBefehl ein -uFlag, das er als beschreibt:

Ersetzen (Aktualisieren) Sie einen vorhandenen Eintrag im ZIP-Archiv nur, wenn er vor dem letzten Stand der Version im ZIP-Archiv geändert wurde.

0
Technometry

Mit dem Dateimanager von Directory Opus 12 können Sie die ZIP-Datei durchsuchen, die bearbeitete Datei aus einem anderen Ordner in den Ordner ziehen und dort ablegen und die zu bearbeitende Datei überschreiben. Sehr leicht

0
lbrayner

Ich habe ein Vim-Plugin geschrieben, das stock.vim erweitert, um verschachtelte ZIP-Dateien zu durchsuchen und zu bearbeiten.

https://github.com/lbrayner/vim-rzip

0
tvorez

Sie können beispielsweise den standardmäßigen KDE-Texteditor verwenden:

  1. Archiv im Archivmanager öffnen
  2. Öffnen Sie die Textdatei im KDE-GUI-Editor
  3. Textdatei und System speichern fordern Sie auf, das Archiv zu aktualisieren - klicken Sie auf Ja
  4. Vergiss nicht die Erlaubnis für das Archiv und den Ordner des Archivs (mein Lieblingsfehler)
Bitte korrigieren Sie die Formatierung in Ihrem Post. davidbaumann vor 6 Jahren 0
-1
Rich Homolka

Kurze pedantische Antwort; Nein. Wenn Sie über die Komprimierung nachdenken, verwenden Sie Redundanz, um die darin enthaltenen Dateien zu verkürzen, sodass bei jeder Bearbeitung die gesamte Datei innerhalb des Archivs, möglicherweise das Archiv, geändert wird.

Wenn Sie weniger theoretisch, praktischer und mehr "Ich möchte nicht manuell entpacken / zip" müssen, gibt es Tools, die Sie verwenden können. Arche unter Linux ist eine, die ich verwendet habe. Sie können das Archiv auch mit fuse-zip mounten, obwohl dies wahrscheinlich mehr Arbeit als eine temporäre Datei erfordert.