możesz użyć, gzip -r myfolderktóry będzie rekurencyjnie gzip plików. W ten sam sposób możesz rozpakować pliki, za pomocą gunzip -r myfolder którego rozpakujesz pliki rekurencyjnie. Aby uzyskać więcej informacji, man gzip
Valentin Bajrami
12
Użyj tar; obsługuje opcje kompresji. gzipjest zaprojektowany jako uzupełnienie tar, a nie jako zamiennik.
devnull
13
Zauważ, że sugestia @ val0x00ff prawie na pewno nie jest tym, co chcesz osiągnąć.
Shadur
4
@Shadur dlatego opublikowałem to, commentponieważ nie była to odpowiedź na jego pytanie.
Valentin Bajrami
2
Demostrate, co oznacza @Shadur. Podane pliki 1i 2w folderze playground. gzip -r ./playgroundda wam 1.gzi 2.gz(i nie więcej 1i 2pliki) w folderze playground, a nie spakowany plik ze wszystkim w nim.
Jeff Xiao,
Odpowiedzi:
660
Nie.
W przeciwieństwie zip, gzipfunkcjonuje jako algorytmu kompresji tylko .
Z różnych powodów, z których niektóre wysłuchaj powrotem do ery napędów taśmowych, Unix używa programu o nazwie tardo archiwizacji danych, które następnie mogą być skompresowane przy użyciu programu do kompresji jak gzip, bzip2, 7zip, itd.
Aby „spakować” katalog, poprawne byłoby polecenie
tar -zcvf archive.tar.gz directory/
Dzięki temu dowiesz tarsię
skompresuj go za pomocą algorytmu z (gzip)
c (utwórz) archiwum z plików w directory( tardomyślnie rekurencyjne)
v (pełna) lista (on / dev / stderr, aby nie wpływała na polecenia potokowe) wszystkie pliki dodane do archiwum.
i zapisz wynik jako plik f (plik) o nazwiearchive.tar.gz
tarKomenda oferuje gzipwsparcie (poprzez -zflagą) wyłącznie dla wygody użytkownika. gzipPolecenia / lib całkowicie oddzielne. Powyższe polecenie jest w rzeczywistości takie samo jak
tar -cv directory | gzip > archive.tar.gz
Aby rozpakować i rozpakować archiwum do bieżącego katalogu, którego byś użył
tar -zxvf archive.tar.gz
To polecenie jest faktycznie takie samo jak
gunzip < archive.tar.gz | tar -xv
tarma wiele, wiele, WIELE innych opcji i zastosowań; Polecam serdecznie kiedyś przeczytać jego stronę podręcznika.
Żeby było jeszcze wyraźniej, jest to dokładnie równoznaczne z tar -cv directory | gzip > archive.tar.gz. Powstałe archiwum można następnie wyodrębnić za pomocą tar -zxvflub nawet zcat file.tar.gz | tar -xv. Zwracając uwagę, że tar jest całkowicie niezależny od gzip, tarpolecenie zawiera po prostu obsługę gzip dla wygody.
Patrick
używam tar cvzfod dłuższego czasu. jedna rzecz do zapamiętania: jeśli używasz systemu Windows ( 7-zipnależy określić) do rozpakowania *.tar.gzpliku, zajmuje to dwie rundy. Jeden do rozpakowania *.tar.gzpliku do *.tarpliku, następny do rozpakowania tego pliku tar do oryginalnej zawartości. zwiększa całkowity czas rozpakowywania, szczególnie w przypadku dużych plików (np. logów)
Jeff Xiao
1
Czy nazywanie archiwum wpływa na maszynę? Wiem, że fajnie byłoby poinformować ludzi o algorytmie pierwotnie używanym do skompresowania go (stąd .gz), ale poza tym, czy to w rzeczywistości ma znaczenie, jak nazwiesz archiwum?
hello_there_andy
3
@hello_there_andy Nie ma znaczenia dla większości uniksów, ale system Windows (i inteligentne uzupełnianie tabulatorów w systemie Linux) przyjmuje założenia na podstawie rozszerzenia nazwy pliku.
gzipKomenda nie będzie rekurencyjnie skompresować katalog w jednym pliku zip, gdy za pomocą -rprzełącznika. Zamiast tego przejdzie tę strukturę katalogów i spakuje każdy znaleziony plik do osobnego pliku.
#!/bin/bash
if [[ -d $1 ]]; then
cd "$1"
cd ..
base=$(basename "$1")
tar -zcvf "$base.tgz" "$base"
if [[ $? == 0 && -f "$base.tgz" ]]; then
rm -rf "$base"
fi
else
echo "Usage: $0 DIRECTORY";
fi
ungzipdir:
#!/bin/bash
if [[ -f $1 ]]; then
base=${1%%.*}
file=$(basename "$1");
dir=$(basename "$base");
if [[ ! -d $base ]]; then
mkdir "$base"
cd "$base"
cd ..
tar -xvf "$file"
if [[ $? == 0 && -d "$dir" ]]; then
rm -f "$file"
fi
else
echo "Directory $base already exists. Nothing done."
fi
else
echo "Usage: $0 file.tgz";
fi
(!!!) Proszę przetestować przed użyciem (ponieważ istnieje „rm -f”, który potencjalnie może usunąć ważne dane, jeśli zostanie użyty w nietypowy sposób).
Jak używać:
cd /home/; gzipdir MyDirectory lub gzipdir /home/MyDirectory
Utworzy /home/MyDirectory.tgz i usunie MyDirectory po sukcesie (!!!).
ungzipdir /home/MyDirectory.tgz
Utworzy / home / MyDirectory i usunie /home/MyDirectory.tgz po sukcesie.
Aby skompresować WSZYSTKIE pliki w katalogu: find ./* -maxdepth 0 -type d -exec gzipdir {} \; (uważaj na komendę find, -exec echo {}najpierw przetestuj i upewnij się, że nie przechwytujesz „./”, który spakuje katalog PARENT, prawdopodobnie psując cały katalog domowy)
Jeśli masz nowe pytanie, zadaj je, klikając przycisk Zadaj pytanie . Dołącz link do tego pytania, jeśli pomaga to w zapewnieniu kontekstu. - Z recenzji
Jeff Schaller
2
@JeffSchaller: To jest odpowiedź. Jest to bardzo błędne (wierzę), ale wyraźnie jest odpowiedzią.
Scott
1
@ize: Jestem prawie pewien, że wysłane polecenie nie używa gzip.
dhag
1
Punkty za użycie zip jak zadane pytanie, najprawdopodobniej autor chciałby wiedzieć, że można ZRÓB TO SAMĄ RZECZ, tak jak to robił w systemie Windows. To smutne, że większość ludzi nie chce myśleć tak daleko.
Florian Heigl,
2
To trudne, gdy pytanie określa ... „używanie gzip”.
Jeff Schaller
1
Dla kompletności, jeśli chcesz spakować plik w tle, użyj odpowiedzi @ Shadur i dołącz &na końcu:
gzip -r myfolder
który będzie rekurencyjnie gzip plików. W ten sam sposób możesz rozpakować pliki, za pomocągunzip -r myfolder
którego rozpakujesz pliki rekurencyjnie. Aby uzyskać więcej informacji,man gzip
tar
; obsługuje opcje kompresji.gzip
jest zaprojektowany jako uzupełnienietar
, a nie jako zamiennik.comment
ponieważ nie była to odpowiedź na jego pytanie.1
i2
w folderzeplayground
.gzip -r ./playground
da wam1.gz
i2.gz
(i nie więcej1
i2
pliki) w folderzeplayground
, a nie spakowany plik ze wszystkim w nim.Odpowiedzi:
Nie.
W przeciwieństwie
zip
,gzip
funkcjonuje jako algorytmu kompresji tylko .Z różnych powodów, z których niektóre wysłuchaj powrotem do ery napędów taśmowych, Unix używa programu o nazwie
tar
do archiwizacji danych, które następnie mogą być skompresowane przy użyciu programu do kompresji jakgzip
,bzip2
,7zip
, itd.Aby „spakować” katalog, poprawne byłoby polecenie
Dzięki temu dowiesz
tar
sięskompresuj go za pomocą algorytmu z (gzip)
c (utwórz) archiwum z plików w
directory
(tar
domyślnie rekurencyjne)v (pełna) lista (on / dev / stderr, aby nie wpływała na polecenia potokowe) wszystkie pliki dodane do archiwum.
i zapisz wynik jako plik f (plik) o nazwie
archive.tar.gz
tar
Komenda oferujegzip
wsparcie (poprzez-z
flagą) wyłącznie dla wygody użytkownika.gzip
Polecenia / lib całkowicie oddzielne. Powyższe polecenie jest w rzeczywistości takie samo jakAby rozpakować i rozpakować archiwum do bieżącego katalogu, którego byś użył
To polecenie jest faktycznie takie samo jak
tar
ma wiele, wiele, WIELE innych opcji i zastosowań; Polecam serdecznie kiedyś przeczytać jego stronę podręcznika.źródło
tar -cv directory | gzip > archive.tar.gz
. Powstałe archiwum można następnie wyodrębnić za pomocątar -zxvf
lub nawetzcat file.tar.gz | tar -xv
. Zwracając uwagę, że tar jest całkowicie niezależny od gzip,tar
polecenie zawiera po prostu obsługę gzip dla wygody.tar cvzf
od dłuższego czasu. jedna rzecz do zapamiętania: jeśli używasz systemu Windows (7-zip
należy określić) do rozpakowania*.tar.gz
pliku, zajmuje to dwie rundy. Jeden do rozpakowania*.tar.gz
pliku do*.tar
pliku, następny do rozpakowania tego pliku tar do oryginalnej zawartości. zwiększa całkowity czas rozpakowywania, szczególnie w przypadku dużych plików (np. logów)gzip
Komenda nie będzie rekurencyjnie skompresować katalog w jednym pliku zip, gdy za pomocą-r
przełącznika. Zamiast tego przejdzie tę strukturę katalogów i spakuje każdy znaleziony plik do osobnego pliku.Przykład
przed
teraz uruchom
gzip
poleceniepo
Jeśli wolisz spakować strukturę katalogów, prawdopodobnie będziesz chciał użyć
tar
polecenia, a następnie skompresować.tar
plik wynikowy .Przykład
Co daje następujący pojedynczy plik:
Możesz potwierdzić jego zawartość:
źródło
Skryptowałem te 2 polecenia:
gzipdir
:ungzipdir
:(!!!) Proszę przetestować przed użyciem (ponieważ istnieje „rm -f”, który potencjalnie może usunąć ważne dane, jeśli zostanie użyty w nietypowy sposób).
Jak używać:
cd /home/; gzipdir MyDirectory
lubgzipdir /home/MyDirectory
Utworzy /home/MyDirectory.tgz i usunie MyDirectory po sukcesie (!!!).
ungzipdir /home/MyDirectory.tgz
Utworzy / home / MyDirectory i usunie /home/MyDirectory.tgz po sukcesie.
źródło
find ./* -maxdepth 0 -type d -exec gzipdir {} \;
(uważaj na komendę find,-exec echo {}
najpierw przetestuj i upewnij się, że nie przechwytujesz „./”, który spakuje katalog PARENT, prawdopodobnie psując cały katalog domowy)Polecam używać
pigz
( równoległe wdrożenie GZip )tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz
źródło
Odpowiedź na pytanie „Czy mogę skompresować cały folder za pomocą zip na Linuksie?”, Należy użyć składni:
źródło
Dla kompletności, jeśli chcesz spakować plik w tle, użyj odpowiedzi @ Shadur i dołącz
&
na końcu:źródło
Jeśli twój linux tar nie obsługuje tej
-z
opcji, możesz użyć następujących opcji:źródło