Jak spakować plik i zachować plik .gz?


220

Domyślnym działaniem gunzip jest usunięcie pliku .gz po jego rozpakowaniu.

Jak zapobiec usuwaniu pliku?

Jeśli ta funkcja nie jest uwzględniona, to czy istnieje alternatywny program, który na to pozwala?

Używam Ubuntu 9.04


3
użyj następującego polecenia: gunzip -k
fazineroso

jaki pistolet ma opcję -k? Nikogo nie widzę
Znik

1
@Znik, gzip / gunzip w wersji 1.6 i nowszej ma opcję-k .
aleksandr barakin

Odpowiedzi:


220

Szukasz:

gzcat x.txt.gz >x.txt

gzcatKomenda jest równoważna gunzip -cktóry po prostu pisze do strumienia wyjściowego stdout. Spowoduje to pozostawienie skompresowanego pliku bez zmian. Możesz więc użyć również:

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

Zauważ, że w niektórych systemach gzcat jest również znany jako zcatdziałający w ten sposób:

zcat x.txt.gz >x.txt

2
Dziękuję za odpowiedź. Dorastając z pkunzip w DOS, uważam to za tak dziwne, że nie ma opcji, aby zachować plik. Zwłaszcza z takim narzędziem jak gzip, które jest tak szeroko stosowane ... po prostu dziwne.
Sen

4
FYI, właściwie nie mam gzcat. Ani mój system lokalny, ani system, w którym zostałem zalogowany. Więc muszę użyć gunzip -c
Sen

26
to prawdopodobnie tylko zcat w twoim systemie.
user23307,

2
Dodatkowa opcja zachowania pliku byłaby naprawdę miła. Na przykład b (un) zip2 używa podobnej składni i pozwala po prostu dodać, -kaby zachować oryginalny plik.
schnaader

1
Możesz także dodać alias linii gzcat = "gunzip -c" do swojego .bashrc
James Kingsbery

55

Możesz użyć -copcji gunzip, która zapisuje dane wyjściowe na standardowe wyjście, a następnie przesyła je do wybranego pliku:

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

Więcej szczegółów na stronie podręcznika .


Nawiasem mówiąc, zauważ, że strona man, o której mowa powyżej, zawiera opcję -k, co oznacza zachowanie plików wejściowych. Może działa to w wersji BSD, ale nie w mojej, więc rozwiązanie -c wydaje się być poprawne.

31

Prostszym rozwiązaniem jest po prostu użycie gunzip jako takiego filtra:

gunzip < myfile.gz > myfile

Myślę, że jest to najczystszy sposób, ponieważ gunzipnigdy nie wie, jaki plik jest pobierany, wszystko, co widzi, to strumień danych, więc nie można zmienić oryginalnego pliku.
Walf,

12

Jeśli tak naprawdę jest to tarball (rozszerzenie .tgz lub .tar.gz), to zamiast przekierowywać do pliku jak wszystkie dotychczasowe odpowiedzi, będziesz chciał go potokować do tar, tak:

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

aby uzyskać rzeczywistą zawartość.


7
lub po prostu zrób: tar xzvf myfile.tar.gz
Joakim Elofsson

prawda, ale tylko jeśli masz tarę GNU. Na przykład ten, który jest dostarczany z Solaris, nie obsługuje opcji z.
Alex

5

Użyj -copcji, aby rozpakować plik na standardowe wyjście. Nie dotknie oryginalnego pliku.

gunzip -c myfile.gz > myfile

4
gzip -dk myfile.gz

LUB

gunzip -k myfile.gz

Komentarze:

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

2

Gnu tar może odczytywać pliki gzip: tar -zxsvf myfile.tar.gzlub tar -jxzvf myfile.tar.bz2pliki bzip tar.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.