Utwórz archiwum za pomocą polecenia „gzip”

12

Muszę utworzyć archiwum za pomocą polecenia gzip (nie tar - to konieczne), a archiwum powinno zawierać pliki z innego katalogu - na przykład / etc. Próbowałem użyć polecenia

gzip myetc.gz /etc

Ale to nie zadziałało.

Elisia Light
źródło
3
gzipnie jest zip. Są to różne narzędzia, które działają inaczej.
roaima
3
gzipjest po prostu kompresorem strumieniowym. Nie wie o plikach ani katalogach.
3
Dlaczego nie możesz użyć smoły?
marcelm
Jeśli nie masz tar, czy masz cpio?
Rup
2
Mówisz, że chcesz utworzyć archiwum, ale nie możesz używać tar. Wiesz, że część słowa „tar” pochodzi od „ARCHIWUM”. To znaczy, to jest jego racja bytu. Kto lub co chciałby wykluczyć „tar” z procesu tworzenia archiwum? Zasadniczo pytasz, jak wkręcić śrubę młotkiem (nie śrubokrętem - jest to konieczne).
Mike S

Odpowiedzi:

6

Gzip działa tylko z jednym plikiem lub strumieniem - dane przesyłane do gzip. Najpierw musisz wygenerować jeden plik, np. Z tar, a następnie możesz go spakować. Inną opcją jest gzipowanie wszystkich pojedynczych plików, a następnie tarowanie ich w jednym pliku.

Oba te rozwiązania są głupie i nie należy ich używać. Powinieneś użyć tar z wbudowaną opcją kompresji i zrobić to wszystko za pomocą jednego polecenia.

SPRBRN
źródło
1
Dlaczego pierwsza metoda powinna być głupia? Jest to zwykły sposób produkcji .tar.gz...
rexkogitans
Cóż, głupie to chyba nie jest właściwe określenie, ale zamiast używać gzip, jeśli możesz użyć tar z opcją c. To jest prostsze i nie sądzę, że przesyłanie tar do gzip ma przewagę.
SPRBRN
Gzip może pracować dla wielu plików z opcją -r, ale utworzy nowy plik .gz dla każdego pliku w folderze.
Luciano Andress Martini
1
@rexkogitans - jest głupi w taki sam sposób, jak cat filename | grep blahgłupi. Jest również znacznie mniej niż optymalny, ponieważ wymagałby dużej tymczasowej przestrzeni. Nie wiem, czy nazwałbym to głupim tak samo, jak nieuzasadnionym, nieoptymalnym i ogólnie po prostu brzydkim. Cóż, głupi też działa.
Mike S
Och, teraz widzę, co jest takie głupie. Nie, `tar -czf` jest właściwą drogą, ponieważ nie wiąże się z bezużytecznością fork().
rexkogitans
13

gzipdziała z plikami, a nie katalogami. Dlatego, aby utworzyć archiwum katalogu, którego musisz użyć tar(który utworzy jeden plik archiwum z wielu plików):

tar cvf myetc.tar /etc

lub w przypadku spakowanego gzipem:

tar cvzf myetc.tar.gz /etc
dr_
źródło
2
jeśli ktoś ma „starożytny” system bez opcji „-z”, może to zrobić: cd / ; tar cf - ./etc | gzip -c - > myetc.tar.gz (jeśli zastanawiasz się, dlaczego zapisuję tar „./etc” zamiast „/ etc”, to dlatego, że w starszych systemach, kiedy używasz tar xvf, wyświetli się w / etc i nadpisze go ... [lub w takim przypadku musisz użyć „pax”]). Komenda odwrotna, tzn. Wypakowanie tego archiwum pod „/ gdzieś”: cd /somewhere ; gzip -dc < /the/location/of/myetc.tar.gz | tar xvf -
Olivier Dulac
1

Jeśli naprawdę nie masz dostępnej tar, możesz użyć gzip do utworzenia kopii zapasowej katalogu za pomocą opcji (-r - rekurencyjnie), ale być może nie jest to dokładnie to, czego oczekujesz ...

Najpierw musisz skopiować katalog na inną nazwę, jeśli chcesz zachować oryginalny katalog nietykalny.

#cp -a directory my_gzip_alone_backup

Po drugie, skompresujesz wszystkie pliki w katalogu rekurencyjnie (-r).

#gzip -r my_gzip_alone_backup

Teraz rzućmy okiem na kopię zapasową my-gzip-alone-backup. Nie będziesz mieć jednego pliku myfile.gz, jak się spodziewasz, ale wiele plików spakowanych rekursywnie. Ale nie warto robić tego z etc z powodu dowiązań symbolicznych ...

Aby rozpakować katalog, tę samą logikę można zastosować za pomocą gunzip.

Innym sposobem jest przekonwertowanie katalogu na pojedynczy plik, jeśli nie masz tar, aby to zrobić, ale masz dd util, jak pokazano w tym poście: /ubuntu/626634/converting-a -plik-do-katalogu

Luciano Andress Martini
źródło