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

Sen
quelle
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
Rogerdpack
quelle
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 .

Stef
quelle
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
retracile
quelle
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.

Alex
quelle
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
Mob
quelle
4
gzip -dk myfile.gz

ODER

gunzip -k myfile.gz

Bemerkungen:

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

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

Justin Smith
quelle