Pokouším se zazipovat složku v unixu. Lze to provést pomocí příkazu gzip?
Komentáře
Odpověď
Ne.
Na rozdíl od zip
funguje gzip
jako kompresní algoritmus pouze .
Z různých důvodů, z nichž některé naslouchají éře páskových jednotek, používá Unix k archivaci dat program s názvem tar
, který lze následně komprimovat pomocí kompresního programu. jako gzip
, bzip2
, 7zip
atd.
V Aby bylo možné adresář „zazipovat“, správný příkaz by byl
tar -zcvf archive.tar.gz directory/
Tím se tar
řekne
-
komprimujte jej pomocí z (gzip) algoritmu
-
c (vytvořit) archiv ze souborů v
directory
(tar
je ve výchozím nastavení rekurzivní) -
v (podrobně) seznam (na / dev / stderr takže to neovlivní pipedované příkazy) všechny soubory, které přidá do archivu.
-
a výstup uloží jako f (soubor) s názvem
archive.tar.gz
Příkaz tar
nabízí gzip
podporu (prostřednictvím příznaku -z
) čistě pro vaše pohodlí . Příkaz gzip
/ lib je zcela samostatný. Výše uvedený příkaz je skutečně stejný jako
tar -cv directory | gzip > archive.tar.gz
Chcete-li dekomprimovat a rozbalit archiv do aktuálního adresáře, který byste použili
tar -zxvf archive.tar.gz
Tento příkaz je skutečně stejný jako
gunzip < archive.tar.gz | tar -xv
tar
má mnoho, mnoho, MNOHO dalších možností a použití také; Vřele doporučuji si někdy přečíst jeho stránku.
Komentáře
- Abychom věci ještě více objasnili, je to přesně ekvivalentní
tar -cv directory | gzip > archive.tar.gz
. Výsledný archiv lze poté extrahovat pomocítar -zxvf
nebo dokoncezcat file.tar.gz | tar -xv
. Jde o to, že tar je zcela nezávislý na gzip, příkaztar
obsahuje pouze podporu gzip pro pohodlí. - používám
tar cvzf
nějakou dobu. jedna věc je třeba si uvědomit: pokud používáte Windows (7-zip
k upřesnění) k rozbalení*.tar.gz
souboru, bude to trvat dvě kola. Jeden k rozbalení*.tar.gz
souboru do*.tar
souboru, další k rozbalení tohoto tar souboru do původního obsahu. zvyšuje celkovou dobu rozbalení, zejména u velkých souborů (např. protokolů) - Ovlivňuje pojmenování archivu něco strojově? Vím, že by bylo hezké dát lidem vědět, jaký algoritmus byl původně použit k jeho zipování (tedy .gz), ale kromě toho skutečně záleží na tom, jak pojmenujete archiv?
- @hello_there_andy rozdíl ve většině unixů, ale Windows (a dokončení inteligentních karet v Linuxu) vytvoří předpoklady založené na příponě souboru.
- @vadimkotov To může být to, co ‚ re hledám: superuser.com/questions/168749/…
Odpověď
Příkaz gzip
nebude při použití znaku -r
přepínač. Spíše bude procházet adresářovou strukturou a zipovat každý soubor, který najde, do samostatného souboru.
Příklad
před
$ tree dir1/ dir1/ |-- dir11 | |-- file11 | |-- file12 | `-- file13 |-- file1 |-- file2 `-- file3
nyní spusťte gzip
příkaz
$ gzip -r dir1
after
$ tree dir1/ dir1/ |-- dir11 | |-- file11.gz | |-- file12.gz | `-- file13.gz |-- file1.gz |-- file2.gz `-- file3.gz
Pokud dáváte přednost struktuře adresářů zazipovat, pravděpodobně budete chtít použít příkaz tar
a výslednou komprimovat .tar
soubor.
$ tar zcvf dir1.tar.gz dir1/
Příklad
$ tar zcvf dir1.tar.gz dir1/ dir1/ dir1/file1 dir1/file2 dir1/dir11/ dir1/dir11/file11.gz dir1/dir11/file12.gz dir1/dir11/file13.gz dir1/file3
Výsledkem je následující jediný soubor:
$ ls -l | grep tar -rw-rw-r-- 1 saml saml 271 Oct 1 08:07 dir1.tar.gz
Můžete potvrdit jeho obsah:
$ tar ztvf dir1.tar.gz drwxrwxr-x saml/saml 0 2013-10-01 08:05 dir1/ -rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file1 -rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file2 drwxrwxr-x saml/saml 0 2013-10-01 08:04 dir1/dir11/ -rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file11.gz -rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file12.gz -rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file13.gz -rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file3
Odpověď
Odpověď na otázku „Mohu pomocí gzip [na linuxu] zazipovat celou složku?“ je, že můžete použít program zip
místo gzip se syntaxí:
zip -r <zip file name> <folder to zip>
Komentáře
- @JeffSchaller: Toto je odpověď. Je to vážně špatný (věřím), ale je to jednoznačně odpověď.
- @ize: I ‚ jsem si jistý, že příkaz, který jste zveřejnili, není, ve skutečnosti použijte gzip.
- Body za použití zipu, jako je položená otázka, s největší pravděpodobností by autor rád věděl, ‚ je možné PRESNĚ STEJNÁ VĚC, jak to dělal na oknech. Je smutné, že většina lidí si ‚ nepřeje přemýšlet tak daleko.
- Je to složité, když otázka určuje … „pomocí gzip“.
- I ‚ hlasuji pro tuto odpověď, protože si myslím, že produkt (soubor zip) je pravděpodobně důležitější než metoda (pomocí gzip).
Odpověď
Napsal jsem tyto dva příkazy:
gzipdir
:
#!/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
(!!!) Před použitím prosím otestujte (protože existuje „rm -f“, které by mohlo potenciálně odstranit důležitá data, pokud se použije neobvyklým způsobem).
Jak používat:
cd /home/; gzipdir MyDirectory
nebo gzipdir /home/MyDirectory
Vytvoří /home/MyDirectory.tgz a odstraní MyDirectory při úspěchu (!!!).
ungzipdir /home/MyDirectory.tgz
Při úspěchu vytvoří / home / MyDirectory a odebere /home/MyDirectory.tgz.
Komentáře
- Chcete-li zazipovat VŠECHNY soubory v adresáři:
find ./* -maxdepth 0 -type d -exec gzipdir {} \;
(buďte opatrní s příkazem find, otestujte jej pomocí-exec echo {}
první a ujistěte se, že ‚ znovu nezachytíte ‚ ./‘ který zazipuje adresář PARENT, což by mohlo poškodit celý váš domovský adresář)
odpověď
Doporučuji použít pigz
( paralelní implementace GZip )
tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz
Komentáře
- Hodně to také používám (a pixz), ale funguje to, když se uplatní potrubí a přesměrování výstupu?
Odpověď
Pokud váš linuxový tar nepodporuje možnost -z
můžete použít následující:
tar -cvf - dir | gzip > dir.tar.gz
Odpověď
Pro úplnost, pokud chcete tar soubor v BAC kground, použijte odpověď @Shadur a na konec připojte &
:
tar -zcvf archive.tar.gz directory/ &
gzip -r myfolder
, který bude rekurzivně gzipovat soubory. Stejným způsobem můžete soubory rozbalit pomocígunzip -r myfolder
který soubory rekurzivně rozbalí. Další informaceman gzip
tar
; podporuje možnosti komprese .gzip
je navržen jako doplněktar
, nikoli jako náhrada.comment
protože to nebyla odpověď na jeho otázku.1
a2
ve složceplayground
.gzip -r ./playground
vám poskytne1.gz
a2.gz
(a žádné další1
a2
soubory) ve složceplayground
, NENÍ soubor ZIP se vším.