Поиск по сайту:

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


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

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

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

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

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

Стоит отметить, что все в этой статье также работает в подсистеме Windows для Linux, что позволяет вам установить оболочку Bash внутри Windows 10 или Windows 11, хотя есть и другие способы открытия файлов tar.gz в Windows.

 

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

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

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

tar -xvzf ukulele_songs.tar.gz

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

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

  • -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 для файла .tar.bz2, были следующими:

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

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

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

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

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

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

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

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

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

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

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

tar -tf ukulele_songs.tar.gz | less

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

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

Мы видим, что каталог Ukulele Songs содержит каталоги с именами Random Songs, Ramones и Possibles.

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

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

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

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

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

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

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

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

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

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

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

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

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

RELATED: Best Linux Laptops for Developers and Enthusiasts