Файлы Tar являются сжатыми архивами. Вы будете часто сталкиваться с ними при использовании дистрибутива Linux, такого как Ubuntu, или даже при использовании терминала в macOS. Вот как извлечь или распаковать содержимое файла tar, также известного как tarball.
Что означают .tar.gz и .tar.bz2?
Файлы с расширением .tar.gz
или .tar.bz2
являются сжатыми архивными файлами. Файл только с расширением .tar
является несжатым, но это будет очень редко.
Часть .tar
расширения файла обозначает архив данных и является причиной того, что оба этих типа файлов называются tar-файлами. Файлы tar датируются вплоть до 1979 года, когда была создана команда tar
позволяющая системным администраторам архивировать файлы на ленту. Сорок лет спустя мы все еще используем команду tar
для извлечения файлов tar на наши жесткие диски. Кто-то где-то, вероятно, все еще использует tar
с лентой.
.gz
расширения .gz
или .bz2
указывает, что архив был сжат с использованием алгоритма сжатия gzip
или bzip2
. Команда tar
будет успешно работать с обоими типами файлов, поэтому не имеет значения, какой метод сжатия использовался, и она должна быть доступна везде, где у вас есть оболочка Bash. Вам просто нужно использовать соответствующие параметры командной строки tar
.
Извлечение файлов из файлов Tar
Допустим, вы загрузили два файла ноты. Один файл называется ukulele_songs.tar.gz
, другой — guitar_songs.tar.bz2
. Эти файлы находятся в каталоге загрузок.
Давайте извлечем песни укулеле:
tar -xvzf ukulele_songs.tar.gz
По мере извлечения файлов они отображаются в окне терминала.
Параметры командной строки, которые мы использовали:
- -x : Извлечь, извлечь файлы из файла tar.
- -v : подробный список файлов по мере их извлечения.
- -z : Gzip, используйте gzip для распаковки файла tar.
- -f : Файл, имя файла 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, с которым мы хотим работать.
Если мы перечислим файлы в каталоге Download, мы увидим, что был создан другой каталог с именем Guitar Songs.
Выбор места для извлечения файлов в
Если мы хотим извлечь файлы в место, отличное от текущего каталога, мы можем указать целевой каталог, используя опцию -C
(указанный каталог).
tar -xvjf guitar_songs.tar.gz -C ~ / Документы / Песни /
Просматривая наш каталог Documents / Songs, мы увидим, что каталог Guitar Songs создан.
Обратите внимание, что целевой каталог уже должен существовать, tar
не создаст его, если он отсутствует. Если вам нужно создать каталог и заставить tar
распаковать файлы в него одной командой, вы можете сделать это следующим образом:
mkdir -p ~ / Documents / Songs / Downloaded && tar -xvjf guitar_songs.tar.gz -C ~ / Documents / Songs / Downloaded /
Опция -p
(parent) заставляет mkdir
создавать любые необходимые родительские каталоги, обеспечивая создание целевого каталога.
Просмотр внутри tar-файлов перед их извлечением
До сих пор мы только что совершили прыжок веры и извлекли файлы из виду незаметно. Вы можете посмотреть, прежде чем прыгать. Вы можете просмотреть содержимое файла tar
прежде чем извлекать его, используя опцию -t
(list). Обычно удобно передавать данные через команду less
.
tar -tf ukulele_songs.tar.gz | Меньше
Обратите внимание, что нам не нужно использовать опцию -z
для -z
списка файлов. Нам нужно только добавить опцию -z
когда мы извлекаем файлы из файла .tar.gz
. Точно так же нам не нужна опция -j
для -j
списка файлов в файле tar.bz2
.
Прокручивая вывод, мы видим, что все в файле tar содержится в каталоге с названием Ukulele Songs, и в этом каталоге есть файлы и другие каталоги.
Мы видим, что каталог Ukulele Songs содержит каталоги под названием Random Songs, Ramones и возможный.
Чтобы извлечь все файлы из каталога в файле tar, используйте следующую команду. Обратите внимание, что путь заключен в кавычки, потому что в пути есть пробелы.
tar -xvzf ukulele_songs.tar.gz "Песни укулеле / Ramones /"
Чтобы извлечь отдельный файл, укажите путь и имя файла.
tar -xvzf ukulele_songs.tar.gz "Песни укулеле / 023 - My Babe.odt"
Вы можете извлечь выборку файлов, используя подстановочные знаки, где *
представляет любую строку символов и ?
представляет любой отдельный символ. Использование подстановочных знаков требует использования параметра --wildcards
.
tar -xvz --wildcards -f ukulele_songs.tar.gz "Песни укулеле / Возможные варианты / 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
Файлы tar.bz2
с хорошей степенью детального контроля, нам нужно запомнить только несколько этих опций.