Jak zkomprimovat nebo rozbalit soubory z terminálu Linux

Soubory ZIP jsou univerzální archiv běžně používaný v systémech Windows, MacOS a dokonce i Linux. Můžete vytvořit archiv zip nebo z něj rozbalit soubory pomocí některých běžných příkazů terminálu Linux.

Formát souboru komprimovaného archivu ZIP

Díky dominanci formátu ZIP v oblasti Windows jsou soubory ZIP pravděpodobně nejběžnější formou komprimovaného archivu na světě.

Zatímco soubory .tar.gz a tar.bz2 jsou v Linuxu běžné, uživatelé Windows vám pravděpodobně pošlou archiv ve formátu ZIP. A pokud chcete archivovat některé soubory a odeslat je uživateli Windows, formát ZIP bude nejjednodušším a nejkompatibilnějším řešením pro každého.

zip, unzip a další nástroje

Možná už víte, že Linux a operační systémy podobné Unixu, jako je macOS, mají nástroje, které vám umožňují vytvářet soubory ZIP a extrahovat z nich soubory, nazývané zip a rozbalit. Existuje však celá rodina souvisejících nástrojů, jako je zipcloak, zipdetails, zipsplit a zipinfo.

Zkontrolovali jsme některé distribuce Linuxu, abychom zjistili, zda tyto nástroje obsahují ve standardní instalaci. Všechny nástroje byly přítomny v Ubuntu 19.04, 18.10 a 18.04. Byli také přítomni v Manjaro 18.04. Fedora 29 obsahovala zip a unzip, ale žádný z dalších utilit, a to byl také případ CentOS.

Chcete-li nainstalovat chybějící prvky na Fedoře 29, použijte následující příkaz:

sudo dnf install perl-IO-Compress

Chcete-li nainstalovat chybějící prvky na CentOS 7, použijte následující příkaz:

sudo yum install perl-IO-Compress

Pokud některý z obslužných programů zip v distribuci Linuxu, která nebyla zmíněna výše, chybí, použijte k instalaci požadovaného balíčku nástroj pro správu balíčků dané distribuce Linux.

Jak vytvořit soubor ZIP pomocí příkazu zip

Chcete-li vytvořit soubor ZIP, musíte zipu sdělit název archivního souboru a které soubory do něj zahrnout. K názvu archivu nemusíte přidávat příponu „.zip“, ale pokud to uděláte, neuškodí.

Chcete-li vytvořit soubor s názvem source_code.zip obsahující všechny soubory zdrojového kódu C a soubory záhlaví v aktuálním adresáři, použijte tento příkaz:

zip source_code *.c *.h

Každý soubor je uveden tak, jak byl přidán. Zobrazí se název souboru a míra komprese, které bylo u tohoto souboru dosaženo.

  Jak nainstalovat téma LightningBug GTK na Linux

Pokud se podíváte na nový archiv ZIP, můžete vidět, že přípona souboru „.zip“ byla automaticky přidána pomocí zip.

ls -l source_code.zip

Pokud nechcete vidět výstup ze zipu při vytváření souboru ZIP, použijte volbu -q (tichý).

zip -q source_code *.c *.h

Včetně adresářů v souborech ZIP

Chcete-li do souboru ZIP zahrnout podadresáře, použijte volbu -r (rekurzivní) a zadejte název podadresáře na příkazový řádek. Chcete-li vytvořit soubor ZIP jako dříve a také zahrnout podadresář archivu, použijte tento příkaz.

zip -r -q source_code archive/ *.c *.h

Abychom byli ohleduplní k osobě, která bude extrahovat soubory ze souboru ZIP, který vytváříte, je často zdvořilé vytvořit soubory ZIP se soubory uvnitř obsaženými v adresáři. Když osoba, která obdrží soubor ZIP, extrahuje jej, všechny soubory jsou úhledně umístěny v adresáři v počítači.

V následujícím příkazu budeme archivovat pracovní adresář a všechny podadresáře. Všimněte si, že tento příkaz je vydáván z nadřazeného adresáře pracovní složky.

zip -r -q source_code work/

Nastavení úrovně komprese

Můžete nastavit, jak velká komprese se použije na soubory, když jsou přidávány do archivu ZIP. Rozsah je od 0 do 9, přičemž 0 není vůbec žádná komprese. Čím vyšší je komprese, tím déle trvá vytvoření souboru ZIP. U skromných souborů ZIP není časový rozdíl významnou penalizací. Ale pro malé soubory ZIP je výchozí komprese (úroveň 6) pravděpodobně stejně dobrá.

Chcete-li, aby zip používal určitou úroveň komprese, předejte číslo jako volbu na příkazovém řádku se znakem „-“ takto:

zip -0 -r -q source_code work/

Výchozí úroveň komprese je 6. Není třeba zadávat volbu -6, ale pokud to uděláte, neuškodí.

zip -r -q source_code work/

Maximální úroveň komprese je úroveň 9.

zip -9 -r -q source_code work/

Při výběru souborů a adresářů, které se zde archivují, je rozdíl mezi žádnou kompresí (úroveň 0) a výchozí kompresí (úroveň 6) 400 kB. Rozdíl mezi výchozí kompresí a nejvyšší úrovní komprese (úroveň 9) je pouze 4K.

To se nemusí zdát mnoho, ale u archivů obsahujících stovky nebo dokonce tisíce souborů by malé množství dodatečné komprese na soubor přispělo k užitečné úspoře místa.

Přidávání hesel do souborů ZIP

Přidávání hesel do souborů ZIP je snadné. Použijte volbu -e (šifrovat) a budete vyzváni k zadání hesla a jeho opětovnému zadání pro ověření.

zip -e -r -q source_code work/

Jak rozbalit soubor ZIP pomocí příkazu unzip

Chcete-li extrahovat soubory ze souboru ZIP, použijte příkaz unzip a zadejte název souboru ZIP. Upozorňujeme, že musíte zadat příponu „.zip“.

unzip source_code.zip

Jak jsou soubory extrahovány, jsou uvedeny v okně terminálu.

  Jak nainstalovat Calligra Office Suite na Linux

Soubory ZIP nenesou podrobnosti o vlastnictví souboru. Všechny extrahované soubory mají vlastníka nastaveného na uživatele, který je extrahuje.

Stejně jako zip má i unzip volbu -q (tichá), takže při extrahování souborů nemusíte vidět výpis souborů.

unzip -q source_code.zip

Extrahování souborů do cílového adresáře

Chcete-li soubory extrahovat do určitého adresáře, použijte volbu -d (adresář) a zadejte cestu k adresáři, do kterého chcete archiv extrahovat.

unzip -q source_code.zip -d ./development

Extrahujte soubory ZIP chráněné heslem

Pokud byl soubor ZIP vytvořen s heslem, unzip vás požádá o heslo. Pokud nezadáte správné heslo, rozbalení nerozbalí soubory.

unzip -q source_code.zip

Pokud vám nezáleží na tom, aby vaše heslo viděli ostatní – ani na tom, aby bylo uloženo ve vaší historii příkazů – můžete heslo zadat na příkazovém řádku pomocí volby -P (heslo). (Musíte použít velké „P.“)

unzip -P fifty.treacle.cutlass -q source_code.zip

Kromě souborů

Pokud nechcete extrahovat konkrétní soubor nebo skupinu souborů, použijte volbu -x (exclude). V tomto příkladu chceme extrahovat všechny soubory kromě těch, které končí příponou „.h“.

unzip -q source_code.zip -x *.h

Přepisování souborů

Předpokládejme, že jste rozbalili archiv, ale omylem jste smazali několik extrahovaných souborů.

Rychlou opravou by bylo znovu extrahovat soubory. Ale pokud se pokusíte extrahovat soubor ZIP ve stejném adresáři jako předtím, unzip vás vyzve k rozhodnutí o přepsání souborů. Bude očekávat jednu z následujících odpovědí.

Kromě odpovědi r (přejmenovat) tyto odpovědi rozlišují malá a velká písmena.

y: Ano, přepsat tento soubor
n: Ne, nepřepisujte tento soubor
A: Vše, přepsat všechny soubory
N: Žádný, nepřepište žádný ze souborů
r: Přejmenujte, rozbalte tento soubor, ale dejte mu nový název. Budete vyzváni k zadání nového jména.

Chcete-li přinutit rozbalení k přepsání existujících souborů, použijte volbu -o (přepsat).

unzip -o -q source_code.zip

Nejúčinnějším způsobem, jak nahradit chybějící soubory, by bylo rozbalit pouze soubory v archivu, které nejsou v cílovém adresáři. Chcete-li to provést, použijte volbu -n (nikdy nepřepisovat).

unzip -n source_code.zip

Pohled dovnitř souboru ZIP

Často je užitečné a poučné vidět seznam souborů uvnitř souboru ZIP, než jej rozbalíte. Můžete to udělat pomocí volby -l (archiv seznamu). Je vedeno méně, aby byl výstup zvládnutelný.

unzip -l source_code.zip | less

Výstup zobrazuje adresáře a soubory v souboru ZIP, jejich délku a čas a datum, kdy byly přidány do archivu. Stiskněte „q“ pro ukončení z méně.

  Jak nakonfigurovat tiskárny v systému Linux pomocí pohárů

Existují další způsoby, jak nahlédnout do souboru ZIP, které poskytují různé typy informací, jak uvidíme.

Přidejte heslo pomocí příkazu zipcloak

Pokud jste vytvořili soubor ZIP, ale zapomněli jste přidat heslo, co můžete dělat? Pomocí příkazu zipcloak můžete rychle přidat heslo do souboru ZIP. Zadejte název souboru ZIP na příkazovém řádku. Budete vyzváni k zadání hesla. Heslo musíte ověřit jeho zadáním podruhé.

zipcloak source_code.zip

Zobrazit podrobnosti souboru Pomocí příkazu zipdetails

Příkaz zipdetails vám ukáže spoustu informací týkajících se souboru ZIP. Jediný rozumný způsob, jak zacházet s množstvím výstupu, který tento příkaz může poskytnout, je procházet méně kanálem.

zipdetails source_code.zip | less

Všimněte si, že informace budou zahrnovat názvy souborů, i když je soubor ZIP chráněn heslem. Tento typ informací je uložen v souboru ZIP jako metadata a není součástí zašifrovaných dat.

Hledání uvnitř souboru pomocí příkazu zipgrep

Příkaz zipgrep umožňuje vyhledávat v souborech v souboru ZIP. V následujícím příkladu chceme vědět, které soubory v souboru ZIP mají text „keyval.h“.

zipgrep keyval.h source_code.zip

Vidíme, že soubory slang.c a getval.c obsahují řetězec „keyval.h“. Můžeme také vidět, že v souboru ZIP jsou dvě kopie každého z těchto souborů v různých adresářích.

Zobrazení informací pomocí příkazu zipinfo

Příkaz zipinfo vám poskytuje další způsob, jak nahlédnout do souboru ZIP. Stejně jako předtím výstup potrubím méně.

zipinfo source_code.zip | less

Zleva doprava výstup ukazuje:

Oprávnění k souboru
Verze nástroje použitá k vytvoření souboru ZIP
Původní velikost souboru
Deskriptor souboru (popsán níže)
Způsob komprese (v tomto případě deflace)
Údaje a časové razítko
Název souboru a libovolného adresáře

Deskriptor souboru se skládá ze dvou znaků. První znak bude „t“ nebo „b“ pro označení textového nebo binárního souboru. Pokud se jedná o velké písmeno, je soubor zašifrován. Druhý znak může být jeden ze čtyř znaků. Tento znak představuje, jaký typ metadat obsahuje tento soubor: žádné, rozšířené místní záhlaví, „pole navíc“ nebo obojí.

-: Pokud neexistuje ani jedno, bude znakem pomlčka
l: pokud existuje rozšířené místní záhlaví, ale žádné další pole
x: pokud neexistuje žádné rozšířené místní záhlaví, ale existuje další pole
X: pokud existuje rozšířené místní záhlaví a existuje další pole

Rozdělte soubor pomocí příkazu zipsplit

Pokud potřebujete poslat soubor ZIP někomu jinému, ale existují omezení velikosti nebo problémy s přenosem souboru, můžete použít příkaz zipsplit k rozdělení původního souboru ZIP na sadu menších souborů ZIP.

Volba -n (velikost) umožňuje nastavit maximální velikost pro každý z nových souborů ZIP. V tomto příkladu rozdělujeme soubor source_code.zip. Nechceme, aby žádný z nových souborů ZIP byl větší než 100 kB (102 400 bajtů).

zipsplit -n 102400 source_code.zip

Velikost, kterou zvolíte, nemůže být menší než velikost žádného ze souborů v souboru ZIP.

Pomocí těchto příkazů můžete vytvářet své vlastní soubory ZIP, rozbalovat soubory ZIP, které obdržíte, a provádět s nimi různé další operace, aniž byste museli opustit terminál Linux.