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

Опубликовано: 2022-01-29
Оболочка Bash на концепции рабочего стола Unity
Фатмавати Ахмад Заэнури/Shutterstock.com

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

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

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

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

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

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

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

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

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

 tar -xvzf укулеле_songs.tar.gz
Реклама

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

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

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

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

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

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

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

 смола -xvjf Guitar_songs.tar.bz2 

Извлечение tar-файла гитарных песен в папку «Загрузки»

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

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

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

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

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

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

 tar -xvjf Guitar_songs.tar.gz -C ~/Документы/Песни/
Реклама

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

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

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

 mkdir -p ~/Документы/Песни/Загружено && tar -xvjf Guitar_songs.tar.gz -C ~/Документы/Песни/Загружено/

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

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

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

 tar -tf укулеле_songs.tar.gz | меньше

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

Содержимое файла tar передается через less

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

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

Реклама

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

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

 tar -xvzf ukulele_songs.tar.gz "Песни для укулеле/Ramones/" 

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

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

 tar -xvzf ukulele_songs.tar.gz "Песни для укулеле/023 - My Babe.odt" 

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

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

 tar -xvz --wildcards -f ukulele_songs.tar.gz "Песни для укулеле/Возможности/B*" 

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

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

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

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

 tar -xvzf укулеле_songs.tar.gz --strip-components=1 

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

Реклама

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

 tar -xvzf укулеле_songs.tar.gz --strip-components=2 

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

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

СВЯЗАННЫЕ С: Лучшие ноутбуки с Linux для разработчиков и энтузиастов