Jak extrahovat soubory ze souboru .tar.gz nebo .tar.bz2 v systému Linux

Soubory typu Tar jsou komprimované archivy, se kterými se běžně setkáte v linuxových distribucích, jako je Ubuntu, a také při práci s terminálem v macOS. Následující text vám ukáže, jak extrahovat, neboli rozbalit, obsah takzvaného „tarballu“.

Co znamenají přípony .tar.gz a .tar.bz2?

Soubory s příponami .tar.gz nebo .tar.bz2 jsou komprimované archivní soubory. Soubor s pouhou příponou .tar je nekomprimovaný, avšak takové soubory jsou méně obvyklé.

Část „.tar“ v příponě odkazuje na „páskový archiv“ a dává tušit, proč se oba typy souborů označují jako „tar“. Historie souborů Tar sahá až do roku 1979, kdy byl vytvořen příkaz tar, umožňující správcům systémů archivovat data na pásku. I po více než čtyřiceti letech se tento příkaz používá pro extrahování dat na pevné disky. Je pravděpodobné, že někde na světě se stále ještě používá páska.

Přípony .gz nebo .bz2 signalizují, že archiv byl komprimován pomocí algoritmů gzip, respektive bzip2. Příkaz tar je schopen pracovat s oběma formáty, takže nezáleží na použité metodě komprese. Měl by být dostupný všude, kde je přítomné prostředí Bash. Stačí jen použít odpovídající možnosti v příkazovém řádku.

Jak rozbalit soubory z archivů Tar

Představte si, že jste stáhli dva soubory s notami. První se jmenuje „ukulele_songs.tar.gz“ a druhý „guitar_songs.tar.bz2“. Oba tyto soubory se nacházejí ve složce „Downloads“.

Pojďme nejprve extrahovat písně pro ukulele:

tar -xvzf ukulele_songs.tar.gz

Během extrakce se v terminálu zobrazují názvy rozbalovaných souborů.

Použité parametry příkazového řádku mají následující význam:

-x: Extrahování a načtení souborů z archivu tar.
-v: Detailní výpis rozbalovaných souborů.
-z: Gzip, použití gzip pro dekompresi archivu.
-f: Soubor, udává jméno archivu tar, se kterým má příkaz pracovat. Za touto volbou musí následovat název archivu.

Po zadání příkazu „ls“ dojde k výpisu souborů ve složce. Mezi nimi by se měla objevit složka „Ukulele Songs“. Extraktované soubory se nacházejí právě zde. Tato složka byla součástí archivu a byla extrahována spolu s obsaženými daty.

Nyní se podíváme na písně pro kytaru. Použijeme prakticky stejný příkaz jako předtím, avšak s jednou důležitou obměnou. Přípona .bz2 naznačuje, že archiv byl komprimován pomocí bzip2. Proto místo parametru -z (gzip) použijeme parametr -j (bzip2).

tar -xvjf guitar_songs.tar.bz2

Opět se během extrakce zobrazují názvy rozbalovaných souborů. Parametry příkazového řádku, které jsme použili pro soubor .tar.bz2, znamenají:

-x: Extrahování, načtení souborů z archivu tar.
-v: Detailní výpis rozbalovaných souborů.
-j: Bzip2, použití bzip2 pro dekompresi archivu.
-f: Soubor, udává jméno archivu tar, se kterým má příkaz pracovat.

Pokud nyní vypíšeme obsah složky Downloads, uvidíme, že se objevila nová složka, která se jmenuje „Guitar Songs“.

Výběr cílové složky pro extrahování

Pokud chceme soubory rozbalit do jiné složky než je aktuální, můžeme použít parametr -C (cílová složka). Například:

tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/

Když se podíváme do složky Documents/Songs, uvidíme, že se zde objevila složka „Guitar Songs“.

Důležité je, že cílová složka musí existovat, příkaz „tar“ ji sám nevytvoří. V případě, že potřebujete složku vytvořit a extrahovat do ní soubory jedním příkazem, můžete to udělat následovně:

mkdir -p ~/Documents/Songs/Downloaded && tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/Downloaded/

Parametr -p (rodiče) zajistí, že příkaz „mkdir“ vytvoří všechny potřebné nadřazené složky, čímž se zajistí vytvoření cílové složky.

Náhled do archivu před jeho rozbalením

Zatím jsme jen bez rozmyslu rozbalovali „neviditelné“ soubory. Možná byste se ale rádi podívali, co archiv obsahuje, předtím, než jej rozbalíte. K prohlédnutí obsahu souboru tar slouží parametr -t (výpis). Výstup je obvykle vhodné přesunout přes příkaz „less“.

tar -tf ukulele_songs.tar.gz | less

Pro výpis souborů není nutné používat parametr -z. Ten je nutný pouze pro extrakci souborů ze souboru .tar.gz. Stejně tak nepotřebujeme parametr -j pro výpis souborů v souboru .tar.bz2.

Prohlížením výpisu vidíme, že vše v archivu tar je uloženo ve složce „Ukulele Songs“, která obsahuje soubory a další podřízené složky.

Složka „Ukulele Songs“ obsahuje podřízené složky „Random Songs“, „Ramones“ a „Possibles“.

Pro extrahování všech souborů z určité složky uvnitř archivu použijte následující příkaz. Cesta je uzavřena v uvozovkách, protože obsahuje mezery:

tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/Ramones/"

Pro extrahování jednoho souboru zadejte cestu a název souboru.

tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/023 - My Babe.odt"

Pro výběr souborů ke zkopírování lze použít zástupné znaky, kde * reprezentuje libovolný řetězec znaků a ? reprezentuje libovolný jeden znak. Použití zástupných znaků vyžaduje parametr –wildcards.

tar -xvz --wildcards -f ukulele_songs.tar.gz "Ukulele Songs/Possibles/B*"

Extrahování souborů bez rozbalování adresářů

Pokud nechcete, aby se na vašem disku vytvářela struktura složek z archivu tar, použijte parametr –strip-components. Tento parametr vyžaduje číselný argument, který říká, kolik úrovní složek se má ignorovat. Soubory z ignorovaných složek se extrahují, ale jejich struktura se na disku nekopíruje.

Při použití parametru –strip-components=1 se u našeho vzorového archivu nevytvoří na disku složka „Ukulele Songs“. Soubory a složky, které by do ní patřily, se rozbalí přímo do cílové složky.

tar -xvzf ukulele_songs.tar.gz --strip-components=1

V našem vzorovém archivu jsou pouze dvě úrovně vnoření složek. Pokud tedy použijeme parametr –strip-components=2, všechny soubory se extrahují do cílové složky a nevytvoří se žádné další složky.

tar -xvzf ukulele_songs.tar.gz --strip-components=2

Prostudováním linuxové manuálové stránky příkazu „tar“ zjistíme, že by se mohl ucházet o titul příkazu s nejvíce možnostmi v příkazovém řádku. Naštěstí pro extrahování souborů ze souborů .tar.gz a tar.bz2 potřebujeme znát jen malou část těchto možností, abychom měli rozbalování pod kontrolou.