Linux tar: как распаковать и создать архив tar.gz

Категория: Bash · Язык: Bash · Обновлено:

Чтобы распаковать архив .tar.gz, выполните tar -xzf архив.tar.gz. Чтобы создать его, используйте tar -czf архив.tar.gz папка. Буквы ключей означают: x извлечь, c создать, z сжатие gzip, f имя файла архива.

Распаковать

Bash
tar -xzf backup.tar.gz                  # в текущую папку
tar -xzf backup.tar.gz -C /tmp/restore  # в указанную папку (она должна существовать)
tar -xf backup.tar.gz                   # формат сжатия определяется автоматически

В современных версиях GNU tar ключ формата сжатия можно не писать: tar -xf сам распознаёт gz, bz2 и xz.

Какой ключ для какого формата

Расширение

Распаковать

Создать

.tar

tar -xf a.tar

tar -cf a.tar папка

.tar.gz, .tgz

tar -xzf a.tar.gz

tar -czf a.tar.gz папка

.tar.bz2

tar -xjf a.tar.bz2

tar -cjf a.tar.bz2 папка

.tar.xz

tar -xJf a.tar.xz

tar -cJf a.tar.xz папка

Создать архив

Bash
tar -czf site.tar.gz site/                             # упаковать папку
tar -czf site.tar.gz --exclude='*.log' site/           # исключить файлы по маске
tar -czf site.tar.gz -C /var/www site                  # без полного пути /var/www внутри архива

Ключ -C переходит в папку перед упаковкой, поэтому в архиве лежит путь site/..., а не var/www/site/.... Ключи --exclude ставьте до имён папок и файлов: GNU tar применяет их только к тому, что указано после них, а при другом порядке выводит предупреждение и завершается с ошибкой.

Посмотреть содержимое без распаковки

Bash
tar -tzf site.tar.gz            # список файлов
tar -tvzf site.tar.gz           # с правами, размерами и датами

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

Bash
tar -xzf site.tar.gz site/index.html          # один файл
tar -xzf site.tar.gz --wildcards 'site/*.css' # по маске

Убрать верхнюю папку при распаковке

Если архив содержит одну корневую папку, а вам нужны файлы сразу в целевой:

Bash
tar -xzf release-1.2.tar.gz --strip-components=1 -C /opt/app

Zip-архивы

Bash
zip -r site.zip site/           # создать
unzip site.zip -d /tmp/out      # распаковать в папку
unzip -l site.zip               # посмотреть содержимое

Дописать в существующий архив

Сжатые архивы .tar.gz дописывать нельзя. Для несжатого .tar есть ключ -r: tar -rf a.tar новый-файл.

Частые вопросы

Что значит «Cannot open: No such file or directory» при -C?

Целевая папка не существует. Создайте её: mkdir -p /tmp/restore.

Как сохранить права доступа и владельца?

Создавайте архив от root и распаковывайте с ключом -p (tar -xzpf), он сохраняет права. Владельца восстанавливает root автоматически.

Как распаковать архив с кириллическими именами из Windows?

Обычно архив tar хранит имена в UTF-8 и проблем нет. Для zip-архивов из Windows может понадобиться unzip -O cp866 архив.zip.