Как извлечь файлы из файла .tar.gz или .tar.bz2 в Linux

Файлы tar представляют собой сжатые архивы. Вы часто будете сталкиваться с ними при использовании дистрибутива Linux, такого как Ubuntu, или даже при использовании терминала в macOS. Вот как извлечь или распаковать содержимое файла tar, также известного как tarball.

Что означают .tar.gz и .tar.bz2?

Файлы с расширением .tar.gz или .tar.bz2 являются сжатыми архивными файлами. Файл с расширением .tar не сжимается, но это бывает очень редко.

Часть .tar расширения файла обозначает ленточный архив, поэтому оба этих типа файлов называются tar-файлами. Файлы tar датируются 1979 годом, когда была создана команда tar, позволяющая системным администраторам архивировать файлы на ленту. Сорок лет спустя мы все еще используем команду tar для извлечения файлов tar на наши жесткие диски. Кто-то где-то, вероятно, до сих пор использует смолу с лентой.

Суффикс расширения .gz или .bz2 указывает на то, что архив был сжат с использованием алгоритма сжатия gzip или bzip2. Команда tar будет без проблем работать с обоими типами файлов, поэтому не имеет значения, какой метод сжатия был использован, и он должен быть доступен везде, где есть оболочка Bash. Вам просто нужно использовать соответствующие параметры командной строки tar.

Извлечение файлов из файлов Tar

Допустим, вы скачали два файла с нотами. Один файл называется ukulele_songs.tar.gz, другой — guitar_songs.tar.bz2. Эти файлы находятся в каталоге загрузок.

  Как установить MicroPad в Linux

Два tar-файла в каталоге загрузок

Давайте извлечем песни для укулеле:

tar -xvzf ukulele_songs.tar.gz

По мере извлечения файлов они отображаются в окне терминала.

Извлечение всех файлов из tar файла

Мы использовали следующие параметры командной строки:

-x: Извлечь, извлечь файлы из tar-файла.
-v: подробный, перечислить файлы по мере их извлечения.
-z: Gzip, используйте gzip для распаковки tar-файла.
-f: File, имя tar-файла, с которым tar должен работать. После этой опции должно быть указано имя tar-файла.

Перечислите файлы в каталоге с помощью ls, и вы увидите, что был создан каталог под названием Ukulele Songs. Извлеченные файлы находятся в этом каталоге. Откуда взялась эта директория? Он содержался в файле tar и был извлечен вместе с файлами.

Каталог песен для укулеле, созданный в каталоге загрузок

Теперь извлечем гитарные композиции. Для этого мы будем использовать почти ту же команду, что и раньше, но с одним важным отличием. Суффикс расширения .bz2 говорит нам, что он был сжат с помощью команды bzip2. Вместо использования параметра-z (gzip) мы будем использовать параметр -j (bzip2).

tar -xvjf guitar_songs.tar.bz2

Извлечение tar-файла гитарных композиций в папку Downloads

Еще раз, файлы отображаются в терминале по мере их извлечения. Для ясности, параметры командной строки, которые мы использовали с tar для файла .tar.bz2, были:

-x: Извлечь, извлечь файлы из tar-файла.
-v: подробный, перечислить файлы по мере их извлечения.
-j: Bzip2, используйте bzip2 для распаковки tar-файла.
-f: файл, имя tar-файла, с которым tar должен работать.

Если мы перечислим файлы в каталоге загрузки, мы увидим, что был создан другой каталог с названием Guitar Songs.

  Как сделать резервную копию настроек Discord в Linux

Каталог гитарных песен, созданный в каталоге Downloads

Выбор места для извлечения файлов

Если мы хотим извлечь файлы в место, отличное от текущего каталога, мы можем указать целевой каталог с помощью параметра -C (указанный каталог).

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

Заглянув в наш каталог Documents / Songs, мы увидим, что каталог Guitar Songs создан.

Каталог гитарных композиций, созданный в каталоге Documents / Songs

Обратите внимание, что целевой каталог уже должен существовать, tar не создаст его, если он отсутствует. Если вам нужно создать каталог и заставить tar извлекать все файлы в него одной командой, вы можете сделать это следующим образом:

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

Параметр -p (parent) заставляет mkdir создавать все необходимые родительские каталоги, обеспечивая создание целевого каталога.

Заглядывать внутрь файлов Tar перед их извлечением

Пока что мы просто решились и извлекли файлы незаметно. Вы можете посмотреть, прежде чем прыгать. Вы можете просмотреть содержимое tar-файла перед его извлечением, используя параметр -t (список). Обычно удобно направлять вывод через команду less.

tar -tf ukulele_songs.tar.gz | less

Обратите внимание, что нам не нужно использовать параметр -z для вывода списка файлов. Нам нужно только добавить опцию -z, когда мы извлекаем файлы из файла .tar.gz. Точно так же нам не нужна опция -j для вывода списка файлов в файле tar.bz2.

Содержимое tar-файла пропущено через меньше

Прокручивая вывод, мы видим, что все в файле tar хранится в каталоге под названием Ukulele Songs, а внутри этого каталога есть файлы и другие каталоги.

Второй вид содержимого tar-файла, пропущенного через less

Мы видим, что каталог песен для укулеле содержит каталоги с названиями «Случайные песни», «Ramones» и «Возможные».

  Как установить тему Neo-to GTK в Linux

Чтобы извлечь все файлы из каталога в файле tar, используйте следующую команду. Обратите внимание, что путь заключен в кавычки, потому что в пути есть пробелы.

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

Извлечение одной папки из файла tar

Чтобы извлечь один файл, укажите путь и имя файла.

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

Извлечение одного файла из файла tar

Вы можете извлечь набор файлов с помощью подстановочных знаков, где * представляет любую строку символов, а? представляет любой одиночный символ. Использование подстановочных знаков требует использования параметра –wildcards.

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

Извлечение песен из tar с помощью подстановочных знаков

Извлечение файлов без извлечения каталогов

Если вы не хотите, чтобы структура каталогов в файле tar воссоздавалась на вашем жестком диске, используйте параметр –strip-components. Для параметра –strip-components требуется числовой параметр. Число показывает, сколько уровней каталогов следует игнорировать. Файлы из игнорируемых каталогов по-прежнему извлекаются, но структура каталогов не реплицируется на ваш жесткий диск.

Если мы укажем –strip-components = 1 с нашим примером tar-файла, самый верхний каталог песен для укулеле в tar-файле не будет создан на жестком диске. Файлы и каталоги, которые были бы извлечены в этот каталог, извлекаются в целевой каталог.

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

Извлечение файлов из tar-файла с --strip-components = 1

В нашем примере tar-файла всего два уровня вложенности каталогов. Поэтому, если мы используем –strip-components = 2, все файлы извлекаются в целевой каталог, и никакие другие каталоги не создаются.

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

Извлечение файлов из tar-файла с --strip-components = 2

Если вы посмотрите на Linux страница руководства вы увидите, что tar должен быть хорошим кандидатом на титул «команда, имеющая наибольшее количество параметров командной строки». К счастью, чтобы позволить нам извлекать файлы из файлов .tar.gz и tar.bz2 с хорошей степенью детализации, нам нужно запомнить лишь несколько из этих параметров.