CLI AI

Распаковать tar.gz, zip и 7z в Linux одной командой

2026-06-15

tar -xf archive.tar.gz распаковывает tar, tar.gz, tar.bz2, tar.xz и tar.zst — современный tar сам определяет сжатие по содержимому файла, без единого флага. Вторая привычка, которая экономит нервы, — посмотреть, что внутри незнакомого архива, прежде чем его распаковывать: без общей папки внутри всё содержимое раскидает по текущему каталогу.

1. Сначала посмотреть, что внутри

clai
$ clai покажи, что лежит в этом архиве, не распаковывая→ tar -tf arch.tar.gz | head -4d/d/b/d/b/two-copy.txtd/a/

-t это список. Если все пути начинаются с одного каталога — архив аккуратный. Если в списке ./file1, ./file2 без общей папки, распаковка раскидает всё по текущему каталогу.

2. Распаковать, не думая о типе сжатия

clai
$ clai распакуй этот архив→ tar -xf arch.tar.gz

Современный GNU tar сам определяет gzip, bzip2, xz и zstd по содержимому. Флаги z, j, J нужны только старым версиям и при создании архива. Одна команда на все tar-подобные форматы.

3. Распаковать в отдельный каталог

clai
$ clai распакуй архив в папку out→ mkdir -p out && tar -xf arch.tar.gz -C out

-C меняет каталог до распаковки. Это же и защита от «архивной бомбы» из первой секции: даже если внутри нет общей папки, мусор окажется в out, а не у вас под ногами.

4. Достать один файл

clai
$ clai достань из архива только файл d/a/three.txt→ tar -xf arch.tar.gz d/a/three.txt

Путь указывается ровно так, как он выглядит в выводе tar -tf. Не угадывайте — скопируйте из списка.

5. Другие форматы

clai
$ clai распакуй этот zip в папку out→ unzip -d out archive.zip

У unzip каталог задаётся через -d, а не -C. Для 7z это 7z x archive.7z -oout — без пробела после -o, иначе он поймёт это как имя файла. Каждый инструмент придумал свой флаг для одного и того же.

6. Не распаковывать ради одного грепа

clai
$ clai поищи слово error в архиве, не распаковывая его→ tar -xzOf logs.tar.gz | grep -n 'error' | head

-O выводит содержимое файлов в стандартный поток вместо записи на диск. Для архива логов на несколько гигабайт это разница между «сразу» и «сначала найдите 10 гигабайт свободного места».

Грабли

  • Флаг f должен идти последним в связке. tar -xfz пытается использовать z как имя файла. Правильно tar -xzf или просто tar -xf.
  • .tar.gz и .tgz — одно и то же. Как и .tar.bz2 с .tbz2. Расширение ничего не решает, tar смотрит на содержимое.
  • Архив с абсолютными путями опасен. Если в выводе tar -tf пути начинаются с /, распаковка может перезаписать системные файлы. Такой архив распаковывайте только с -C в отдельный каталог и после просмотра списка.

Похожие вопросы

Как посмотреть размер файлов внутри архива? tar -tvf archive.tar.gz — v добавляет права, владельца, размер и дату.

Почему unzip ругается на кириллицу в именах? Кодировка имён в zip не стандартизована. Помогает unzip -O CP866 для архивов из Windows.

Как распаковать несколько архивов разом? for f in *.tar.gz; do tar -xf "$f" -C "${f%.tar.gz}"; done, предварительно создав каталоги.

Читайте также

CliAI сам подберёт нужную команду для любого архива, вместе со всеми флагами. Установка одной строкой.