Pokouším se zazipovat složku v unixu. Lze to provést pomocí příkazu gzip?

Komentáře

  • můžete použít 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ší informace man gzip
  • použijte tar; podporuje možnosti komprese . gzip je navržen jako doplněk tar, nikoli jako náhrada.
  • Upozorňujeme, že @ val0x00ff ‚ návrh téměř jistě není tím, čeho chcete dosáhnout.
  • @Shadur, proto jsem jej ‚ zveřejnil jako comment protože to nebyla odpověď na jeho otázku.
  • Demostrovat, co znamená @Shadur. Dané soubory 1 a 2 ve složce playground . gzip -r ./playground vám poskytne 1.gz a 2.gz (a žádné další 1 a 2 soubory) ve složce playground, NENÍ soubor ZIP se vším.

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 dokonce zcat file.tar.gz | tar -xv. Jde o to, že tar je zcela nezávislý na gzip, příkaz tar 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/ & 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *