Як витягти файли з файлу .tar.gz або .tar.bz2 у Linux

Архіви Tar є звичайним способом зберігання згрупованих файлів у стисненому вигляді. Ви часто стикатиметеся з ними в середовищі Linux, наприклад, в Ubuntu, або навіть при роботі з терміналом у macOS. У цьому матеріалі розглянемо, як видобувати файли з tar-архівів, іншими словами, як їх розпаковувати.

Що криється за розширеннями .tar.gz і .tar.bz2?

Файли, що закінчуються на .tar.gz або .tar.bz2, представляють собою стиснені архівні файли. Самі по собі файли .tar не стиснуті, хоча це трапляється досить рідко.

Розширення .tar означає tape archive, тобто стрічковий архів. Історично, файли tar з’явилися у 1979 році, коли команда tar була створена для архівування даних на магнітні стрічки. Незважаючи на довгий час, команда tar досі використовується для розпакування архівів на жорстких дисках. Можливо, десь досі використовують стрічки для цих цілей.

Суфікси .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 має працювати. Після цього параметра вказується ім’я 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 має працювати.

Якщо переглянемо файли в папці “Завантаження”, побачимо, що там є ще одна папка під назвою “Guitar Songs”.

Вибір цільового каталогу для розпакування

Щоб розпакувати файли не в поточний каталог, а в інше місце, можна вказати цільову папку за допомогою параметра -C (цільова папка).

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

Переглянувши вміст папки “Documents/Songs”, ви побачите що там створилася папка “Guitar Songs”.

Зверніть увагу, що цільова папка має існувати. Tar не створить її, якщо її не існує. Якщо потрібно створити папку та розпакувати туди файли однією командою, це можна зробити так:

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

Параметр -p (батьківські) змушує mkdir створити всі необхідні батьківські папки, гарантуючи, що цільовий каталог буде створено.

Перегляд вмісту tar-архівів перед розпакуванням

До цього моменту ми довіряли вмісту архівів і розпаковували їх, не бачачи, що там знаходиться. Можна спочатку переглянути вміст архіву. Для цього можна використати параметр -t (список) і передати вивід через команду less.

tar -tf ukulele_songs.tar.gz | less

Зверніть увагу, що параметр -z не потрібен для перегляду файлів. Він потрібен лише при видобуванні файлів з .tar.gz. Так само, параметр -j не потрібен для перегляду файлів в tar.bz2.

Прокручуючи вивід, можна побачити, що всі файли в tar-архіві зберігаються в папці “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=1 для нашого прикладу, папка “Ukulele Songs” не буде створена на жорсткому диску, а файли будуть розпаковані безпосередньо в цільову папку.

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

В нашому прикладі tar-архів має лише два рівні вкладеності папок. Тому, якщо вказати –strip-components=2, всі файли будуть розпаковані в цільову папку, а інші папки не створяться.

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

Переглянувши довідку tar, можна побачити, що це один з лідерів за кількістю параметрів командного рядка. На щастя, щоб мати можливість розпаковувати файли з tar.gz та tar.bz2 з належним рівнем контролю, потрібно запам’ятати лише кілька основних параметрів.