Wie kann man eine Datei gunzipen und die .gz-Datei behalten?


220

Das Standardverhalten von gunzip ist das Löschen der .gz-Datei nach dem Dekomprimieren.

Wie verhindere ich, dass die Datei gelöscht wird?

Wenn diese Funktionalität nicht enthalten ist, gibt es dann ein alternatives Programm, das dies ermöglicht?

Ich benutze Ubuntu 9.04


3
Verwenden Sie den folgenden Befehl: gunzip -k
fazineroso

Welcher Gunzip hat -k Option? Ich sehe niemanden
Znik

1
@Znik, gzip / gunzip Version 1.6 und höher hat die Option-k .
Aleksandr Barakin

Antworten:


220

Du schaust nach:

gzcat x.txt.gz >x.txt

Der gzcatBefehl entspricht dem, in gunzip -cden einfach der Ausgabestream geschrieben wird stdout. Dadurch bleibt die komprimierte Datei unberührt. So können Sie auch verwenden:

gunzip -c x.txt.gz >x.txt

Beachten Sie, dass gzcat auf einigen Systemen auch zcatso ausgeführt wird:

zcat x.txt.gz >x.txt

2
Danke für die Antwort. Ich bin mit pkunzip unter DOS aufgewachsen und finde es so seltsam, dass es keine Option gibt, die Datei zu behalten. Vor allem, wenn ein Tool wie gzip so weit verbreitet ist ... einfach komisch.
Sen

4
Zu Ihrer Information, ich habe eigentlich kein gzcat. Weder mein lokales System noch das System, in das ich eingebunden war. Also muss ich gunzip -c verwenden
Sen

26
Es ist wahrscheinlich nur Zcat auf Ihrem System.
user23307

2
Eine zusätzliche Option zum Speichern der Datei wäre in der Tat nett. Zum Beispiel verwendet b (un) zip2 eine ähnliche Syntax und erlaubt das einfache Hinzufügen -k, um die ursprüngliche Datei zu behalten.
Schnaader

1
Sie können auch die Zeile alias gzcat = "gunzip -c" zu Ihrer .bashrc
James Kingsbery

55

Sie können die -cOption gunzip verwenden, mit der die Ausgabe in stdout geschrieben und anschließend an die Datei Ihrer Wahl weitergeleitet wird:

gunzip -c compressed-file.gz > decompressed-file

Weitere Details auf der Manpage .


Beachten Sie im Übrigen, dass in der oben genannten Manpage die Option -k aufgeführt ist, dh, Eingabedateien bleiben erhalten. Möglicherweise funktioniert dies in der BSD-Version, in meiner jedoch nicht. Die -c-Lösung scheint also die richtige zu sein.

31

Eine einfachere Lösung ist, einfach gunzip als Filter zu verwenden:

gunzip < myfile.gz > myfile

Ich denke, dies ist der sauberste Weg, da er gunzipnie weiß, welche Datei er erhält. Alles, was er sieht, ist ein Datenstrom. Daher kann er möglicherweise die ursprüngliche Datei nicht ändern.
Walf

12

Wenn es sich tatsächlich um einen Tarball (Erweiterung .tgz oder .tar.gz) handelt, sollten Sie ihn wie folgt an tar leiten:

gunzip -c myfile.tar.gz | tar xvf -

damit Sie den eigentlichen Inhalt erhalten.


7
oder einfach machen: tar xzvf myfile.tar.gz
Joakim Elofsson

stimmt, aber nur wenn du GNU tar hast. Die mit Solaris gelieferte Option unterstützt beispielsweise die Option z nicht.
Alex

5

Verwenden Sie die -cOption, um die Datei auf stdout zu dekomprimieren. Die Originaldatei wird nicht berührt.

gunzip -c myfile.gz > myfile

4
gzip -dk myfile.gz

ODER

gunzip -k myfile.gz

Bemerkungen:

   -k --keep    Keep (don't delete) input files during compression or decompression.

2

Gnu tar kann gzip-Dateien lesen: tar -zxsvf myfile.tar.gzoder tar -jxzvf myfile.tar.bz2für bzipped tar-Dateien.

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.