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

Sen
źródło
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
rogerdpack
źródło
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 .

Stef
źródło
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
retracile
źródło
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ść.

Alex
źródło
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
tłum
źródło
4
gzip -dk myfile.gz

LUB

gunzip -k myfile.gz

Komentarze:

   -k --keep    Keep (don't delete) input files during compression or decompression.
Nabi KAZ
źródło
2

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

Justin Smith
źródło