Tar, gzip и zip
Tar, gzip и zip — инструменты для упаковки и сжатия файлов.
tarобъединяет несколько файлов в один архив,gzipсжимает отдельный поток или файл, аzipодновременно упаковывает и сжимает набор файлов.
Руководство ориентировано на Linux и macOS. Большинство ZIP-архивов также совместимо с Windows.
Содержание
- Основные различия
- Расширения архивов
- Tar
- Создание tar-архивов
- Просмотр tar-архивов
- Распаковка tar-архивов
- Сжатые tar-архивы
- Выборочное извлечение
- Исключение файлов
- Добавление и обновление файлов в tar
- Права, владельцы и атрибуты
- Gzip
- Сжатие и распаковка gzip
- Работа gzip с потоками
- Zip и unzip
- Создание ZIP-архивов
- Просмотр и распаковка ZIP
- Обновление ZIP-архивов
- Пароли и шифрование ZIP
- Проверка целостности
- Разбиение архивов на части
- Архивация через SSH
- Безопасная распаковка
- Устранение неполадок
- Шпаргалка
Основные различия
| Инструмент | Упаковывает несколько файлов | Сжимает данные | Типичное применение |
|---|---|---|---|
tar |
Да | Нет, если не подключён компрессор | Резервные копии и Unix-архивы |
gzip |
Нет | Да | Сжатие одного файла или потока |
tar + gzip |
Да | Да | Архивы .tar.gz и .tgz |
zip |
Да | Да | Обмен файлами между разными ОС |
unzip |
Нет | Распаковывает ZIP | Просмотр и извлечение .zip |
Главное различие:
tar → объединяет файлы
gzip → сжимает данные
zip → объединяет и сжимает файлыКоманда:
tar -cf archive.tar project/создаёт несжатый архив.
Команда:
gzip archive.tarсжимает его и создаёт:
archive.tar.gzОбычно эти две операции объединяют:
tar -czf archive.tar.gz project/Расширения архивов
| Расширение | Формат |
|---|---|
.tar |
Несжатый tar-архив |
.tar.gz |
Tar, сжатый gzip |
.tgz |
Короткое имя для .tar.gz |
.gz |
Отдельный файл, сжатый gzip |
.zip |
ZIP-архив |
.tar.bz2 |
Tar, сжатый bzip2 |
.tar.xz |
Tar, сжатый xz |
.tar.zst |
Tar, сжатый Zstandard |
Расширение помогает определить ожидаемый формат, но не гарантирует его. Проверить фактический тип файла можно командой:
file archive.tar.gzTar
tar изначально создавался для записи файлов на магнитные ленты. Название происходит от tape archive.
Tar сохраняет внутри архива:
- структуру каталогов;
- имена файлов;
- права доступа;
- время изменения;
- символические ссылки;
- идентификаторы владельца и группы;
- некоторые дополнительные атрибуты, в зависимости от реализации и параметров.
Основной синтаксис:
tar OPTIONS ARCHIVE FILESНаиболее часто используются параметры:
| Параметр | Назначение |
|---|---|
-c |
Создать архив |
-x |
Извлечь файлы |
-t |
Показать содержимое |
-f FILE |
Указать файл архива |
-v |
Выводить имена обрабатываемых файлов |
-z |
Использовать gzip |
-C DIR |
Перейти в каталог |
--exclude=PATTERN |
Исключить файлы |
-r |
Добавить файлы в несжатый tar |
-u |
Добавить только более новые версии |
--delete |
Удалить запись из архива в GNU tar |
После -f должно следовать имя архива:
tar -czf archive.tar.gz project/В короткой записи порядок букв обычно несущественен, но f должен быть связан с именем файла архива. Для ясности рекомендуется использовать привычные комбинации:
-cf создать .tar
-czf создать .tar.gz
-tf показать содержимое
-xf извлечь .tar
-xzf извлечь .tar.gzСоздание tar-архивов
Архивирование одного файла
tar -cf report.tar report.txtАрхивирование каталога
tar -cf project.tar project/Архивирование нескольких файлов
tar -cf documents.tar report.txt notes.txt table.csvАрхивирование нескольких каталогов
tar -cf backup.tar documents/ photos/ configuration/Подробный вывод
tar -cvf project.tar project/Параметр -v выводит имена добавляемых файлов.
Архив без внешнего родительского каталога
Команда:
tar -cf project.tar project/сохраняет каталог project как верхний элемент архива.
Чтобы поместить в архив только его содержимое:
tar -cf project.tar -C project .Содержимое архива в первом случае:
project/
project/src/
project/src/main.pyВо втором:
./
./src/
./src/main.pyАрхивирование абсолютного пути
Не рекомендуется сохранять абсолютные пути:
tar -cf backup.tar /home/alice/documentsGNU tar обычно удаляет начальный / и сообщает:
Removing leading '/' from member namesБолее управляемый вариант:
tar -cf backup.tar -C /home/alice documentsВ архиве будет путь:
documents/а не:
/home/alice/documents/Просмотр tar-архивов
Показать содержимое:
tar -tf archive.tarПодробный список:
tar -tvf archive.tarДля .tar.gz:
tar -tzf archive.tar.gzСовременные версии tar часто автоматически определяют алгоритм сжатия при чтении:
tar -tf archive.tar.gzНайти конкретные записи:
tar -tf archive.tar.gz | grep 'config'Для имён с необычными символами надёжнее использовать встроенное сопоставление tar:
tar -tf archive.tar.gz --wildcards '*config*'Распаковка tar-архивов
Распаковка в текущий каталог
tar -xf archive.tarДля gzip-сжатого архива:
tar -xzf archive.tar.gzМногие современные реализации умеют определять сжатие автоматически:
tar -xf archive.tar.gzРаспаковка в указанный каталог
Каталог должен существовать:
mkdir -p destination
tar -xf archive.tar -C destinationДля .tar.gz:
mkdir -p destination
tar -xzf archive.tar.gz -C destinationПодробный вывод при распаковке
tar -xvf archive.tarИли:
tar -xzvf archive.tar.gzУдаление верхнего уровня каталога
Если архив имеет структуру:
project-1.0/
project-1.0/src/
project-1.0/README.mdможно убрать первый компонент пути:
mkdir -p project
tar -xf project-1.0.tar.gz \
-C project \
--strip-components=1Результат:
project/
├── src/
└── README.mdЕсли число компонентов указано неверно, некоторые файлы могут быть пропущены. Сначала проверьте структуру:
tar -tf project-1.0.tar.gz | headСжатые tar-архивы
Создание .tar.gz
tar -czf archive.tar.gz project/С подробным выводом:
tar -czvf archive.tar.gz project/Распаковка .tar.gz
tar -xzf archive.tar.gzВ отдельный каталог:
mkdir -p destination
tar -xzf archive.tar.gz -C destinationПросмотр .tar.gz
tar -tzf archive.tar.gzСжатие с помощью внешнего gzip
Сначала создать tar:
tar -cf archive.tar project/Затем сжать:
gzip archive.tarПолучится:
archive.tar.gzОбратная операция:
gunzip archive.tar.gz
tar -xf archive.tarУправление уровнем gzip-сжатия
У gzip есть уровни от 1 до 9:
-1 быстрее, но слабее сжатие
-6 стандартный уровень
-9 медленнее, но обычно лучшее сжатиеПередать уровень gzip через GNU tar можно с помощью переменной окружения:
GZIP=-9 tar -czf archive.tar.gz project/Более явный потоковый вариант:
tar -cf - project/ | gzip -9 > archive.tar.gzРаспаковка такого архива:
gzip -dc archive.tar.gz | tar -xf -Выборочное извлечение
Сначала посмотрите точные пути:
tar -tf archive.tar.gzИзвлечь один файл:
tar -xzf archive.tar.gz project/README.mdИзвлечь каталог:
tar -xzf archive.tar.gz project/config/Извлечь несколько файлов:
tar -xzf archive.tar.gz \
project/README.md \
project/config/app.confПуть должен совпадать с записью внутри архива.
Извлечение по шаблону
GNU tar:
tar -xzf archive.tar.gz --wildcards '*.log'Извлечь все файлы с расширением .conf:
tar -xzf archive.tar.gz --wildcards '*.conf'Чтобы оболочка не раскрыла шаблон заранее, заключайте его в кавычки.
Исключение файлов
Исключение по шаблону
tar -czf project.tar.gz \
--exclude='*.log' \
project/Исключить каталог:
tar -czf project.tar.gz \
--exclude='project/node_modules' \
project/Несколько исключений:
tar -czf project.tar.gz \
--exclude='project/node_modules' \
--exclude='project/.git' \
--exclude='*.log' \
project/Файл со списком исключений
Файл exclude.txt:
project/node_modules
project/.git
*.log
*.tmpСоздание архива:
tar -czf project.tar.gz \
--exclude-from=exclude.txt \
project/Короткий вариант:
tar -czf project.tar.gz -X exclude.txt project/Исключение самого архива
Не создавайте архив внутри архивируемого каталога без исключения:
tar -czf project/backup.tar.gz project/Архив может попытаться включить самого себя.
Безопаснее создать его снаружи:
tar -czf project-backup.tar.gz project/Либо явно исключить:
tar -czf project/backup.tar.gz \
--exclude='project/backup.tar.gz' \
project/Добавление и обновление файлов в tar
Эти операции обычно применяются только к несжатым tar-архивам.
Добавление файла
tar -rf archive.tar new-file.txtДобавление каталога
tar -rf archive.tar additional-files/Добавление только более новых файлов
tar -uf archive.tar project/Удаление файла из архива
GNU tar:
tar --delete -f archive.tar path/in/archive.txtОперации -r, -u и --delete обычно нельзя напрямую использовать для .tar.gz, потому что сжатый архив представляет собой единый поток.
Для изменения .tar.gz надёжнее:
- распаковать архив;
- изменить файлы;
- создать новый архив.
Пример:
mkdir archive-work
tar -xzf archive.tar.gz -C archive-work
cp new-file.txt archive-work/
tar -czf archive-new.tar.gz -C archive-work .Права, владельцы и атрибуты
Сохранение прав
Tar обычно сохраняет права файлов внутри архива. При распаковке поведение зависит от пользователя и параметров.
Обычная распаковка:
tar -xf archive.tarСохранение записанных прав:
tar -xpf archive.tarПараметр -p особенно актуален при восстановлении системных резервных копий от root.
Владельцы файлов
При извлечении от обычного пользователя файлы обычно становятся собственностью этого пользователя.
При извлечении от root tar может восстановить числовых владельцев из архива. Для недоверенного архива это нежелательно.
Не восстанавливать владельца из архива:
tar --no-same-owner -xf archive.tarПри создании переносимого архива можно нормализовать владельцев в GNU tar:
tar -czf archive.tar.gz \
--owner=0 \
--group=0 \
--numeric-owner \
project/Символические ссылки
По умолчанию tar архивирует саму символическую ссылку, а не содержимое объекта, на который она указывает.
Пример:
current -> releases/1.0В архив обычно попадёт ссылка current.
Чтобы разыменовывать ссылки и архивировать целевые файлы:
tar -chzf archive.tar.gz project/Параметр -h или --dereference требует осторожности:
- в архив может попасть больше данных, чем ожидалось;
- возможны циклические ссылки;
- ссылка может вести за пределы исходного каталога.
Gzip
gzip сжимает один файл или поток данных. Он не хранит структуру каталогов и не объединяет несколько файлов в один логический архив.
Команда:
gzip report.txtобычно:
- создаёт
report.txt.gz; - удаляет исходный
report.txt.
Чтобы сохранить исходный файл, используйте -k.
Основные команды:
| Команда | Назначение |
|---|---|
gzip FILE |
Сжать файл |
gzip -k FILE |
Сжать и сохранить оригинал |
gzip -d FILE.gz |
Распаковать |
gunzip FILE.gz |
Распаковать |
gzip -c FILE |
Вывести сжатые данные в stdout |
gzip -dc FILE.gz |
Вывести распакованные данные в stdout |
zcat FILE.gz |
Показать распакованное содержимое |
zless FILE.gz |
Просмотреть через less |
gzip -t FILE.gz |
Проверить целостность |
gzip -l FILE.gz |
Показать информацию о сжатии |
Сжатие и распаковка gzip
Сжать файл
gzip report.txtРезультат:
report.txt.gzИсходный report.txt обычно удаляется.
Сохранить исходный файл
gzip -k report.txtОстанутся оба файла:
report.txt
report.txt.gzУровень сжатия
Быстрое сжатие:
gzip -1 large.logМаксимальный стандартный уровень:
gzip -9 large.logУровень по умолчанию:
gzip -6 large.logРаспаковать файл
gunzip report.txt.gzЭквивалент:
gzip -d report.txt.gzОбычно создаётся report.txt, а .gz удаляется.
Сохранить .gz:
gzip -dk report.txt.gzПринудительная перезапись
gzip -f report.txtПараметр -f может перезаписать существующий файл, поэтому его следует использовать осторожно.
Показать статистику
gzip -l report.txt.gzПример полей:
compressed
uncompressed
ratio
uncompressed_nameСжатие нескольких файлов
gzip file1.txt file2.txt file3.txtБудут созданы отдельные файлы:
file1.txt.gz
file2.txt.gz
file3.txt.gzЭто не единый архив. Чтобы получить один файл, используйте tar:
tar -czf files.tar.gz file1.txt file2.txt file3.txtРабота gzip с потоками
Сжать без удаления исходника
gzip -c report.txt > report.txt.gzРаспаковать в другой файл
gzip -dc report.txt.gz > restored-report.txtВывести содержимое
zcat report.txt.gzЭквивалент:
gzip -dc report.txt.gzПросмотреть большой журнал
zless application.log.gzПоиск по сжатому тексту:
zgrep 'ERROR' application.log.gzБез учёта регистра:
zgrep -i 'error' application.log.gzСоздать .tar.gz через конвейер
tar -cf - project/ | gzip -9 > project.tar.gzЗдесь - означает стандартный поток вывода.
Распаковать поток
gzip -dc project.tar.gz | tar -xf -Сжать вывод команды
journalctl --since yesterday | gzip > journal.log.gzРаспаковать и передать другой команде
gzip -dc access.log.gz | grep ' 500 'Zip и unzip
Формат ZIP одновременно хранит несколько файлов и сжимает их. Каждый файл обычно сжимается отдельно, поэтому отдельные элементы можно извлекать без распаковки всего архива.
ZIP удобен для:
- обмена файлами с Windows;
- отправки документов;
- архивов, которые должны открываться стандартными графическими средствами;
- выборочного извлечения файлов.
По сравнению с tar ZIP может хуже сохранять некоторые Unix-метаданные:
- владельцев;
- специальные типы файлов;
- расширенные атрибуты;
- точную семантику символических ссылок.
Для системных резервных копий Linux обычно предпочтительнее tar.
Установка zip и unzip
Ubuntu и Debian:
sudo apt update
sudo apt install zip unzipFedora:
sudo dnf install zip unzipArch Linux:
sudo pacman -S zip unzipПроверка:
zip -v
unzip -vСоздание ZIP-архивов
Архивирование одного файла
zip archive.zip report.txtАрхивирование нескольких файлов
zip documents.zip report.txt notes.txt table.csvАрхивирование каталога
zip -r project.zip project/Параметр -r рекурсивно обходит каталоги.
Архивирование содержимого каталога
Если выполнить:
zip -r project.zip project/верхним элементом архива будет project/.
Чтобы добавить только содержимое:
cd project
zip -r ../project.zip .Либо в подоболочке:
(
cd project
zip -r ../project.zip .
)Уровень сжатия
Без сжатия:
zip -0 archive.zip large-file.binМаксимальный стандартный уровень:
zip -9 archive.zip report.txtУровень по умолчанию обычно является компромиссом между скоростью и размером.
Для уже сжатых форматов, например JPEG, MP4 или .gz, повторное сжатие часто почти не уменьшает размер:
zip -0 media.zip photo.jpg video.mp4Исключение файлов
zip -r project.zip project/ \
-x 'project/.git/*' \
'project/node_modules/*' \
'*.log'Шаблоны следует заключать в кавычки, чтобы их не раскрыла оболочка.
Чтение списка файлов из stdin
find project -type f -name '*.txt' -print |
zip text-files.zip -@Обычный zip -@ читает по одному имени файла на строку. Имена с переводами строк могут обрабатываться некорректно.
Просмотр и распаковка ZIP
Показать содержимое
unzip -l archive.zipБолее подробная информация:
zipinfo archive.zipКраткий список:
zipinfo -1 archive.zipРаспаковать в текущий каталог
unzip archive.zipРаспаковать в отдельный каталог
unzip archive.zip -d destinationЕсли каталога нет, unzip обычно создаст его.
Извлечь один файл
unzip archive.zip project/README.mdИзвлечь несколько файлов
unzip archive.zip \
project/README.md \
project/config/app.confИзвлечь файлы по шаблону
unzip archive.zip '*.txt'Исключить файлы при распаковке
unzip archive.zip -x '*.log' '*/cache/*'Не перезаписывать существующие файлы
unzip -n archive.zipПерезаписывать без вопросов
unzip -o archive.zipПараметр -o может уничтожить локальные изменения, поэтому используйте его осторожно.
Вывести файл в stdout
unzip -p archive.zip project/README.mdПросмотр через less:
unzip -p archive.zip project/README.md | lessОбновление ZIP-архивов
Добавление файла
Если архив уже существует:
zip archive.zip new-file.txtФайл будет добавлен или заменён.
Обновление изменившихся файлов
zip -u archive.zip report.txt notes.txtРекурсивное обновление каталога:
zip -ur project.zip project/Синхронизация содержимого
zip -rFS project.zip project/Параметр -FS синхронизирует архив с текущим набором файлов:
- добавляет новые файлы;
- обновляет изменившиеся;
- удаляет из архива отсутствующие исходные файлы.
Перед применением к важному архиву сделайте резервную копию.
Удаление файла из ZIP
zip -d archive.zip path/in/archive.txtУдаление по шаблону:
zip -d archive.zip '*.log'Перемещение файлов в архив
zip -m archive.zip report.txtПосле успешного добавления исходный файл удаляется. Используйте -m осторожно.
Пароли и шифрование ZIP
Запрос пароля интерактивно
zip -e private.zip document.txtДля каталога:
zip -er private.zip private-directory/Команда запросит пароль без отображения его в командной строке.
Не рекомендуется передавать пароль через параметр -P:
zip -P password archive.zip file.txtПароль может попасть:
- в историю оболочки;
- в список процессов;
- в журналы автоматизации.
Ограничения стандартного ZIP-шифрования
Классическая команда zip -e часто использует устаревшее шифрование ZipCrypto. Оно не подходит для надёжной защиты конфиденциальных данных.
Для чувствительных данных лучше применять инструменты с современным шифрованием, например:
7zс AES-256;age;gpg;- зашифрованный контейнер.
Пример с GPG:
tar -czf - private-directory/ |
gpg --symmetric --cipher-algo AES256 \
--output private.tar.gz.gpgРасшифровка и распаковка:
gpg --decrypt private.tar.gz.gpg |
tar -xzf -Не передавайте пароль через аргументы командной строки.
Проверка целостности
Проверка gzip
gzip -t archive.tar.gzПри успехе команда обычно ничего не выводит.
Показать результат явно:
gzip -t archive.tar.gz && echo 'gzip: архив исправен'Подробная проверка:
gzip -tv archive.tar.gzПроверка tar.gz
Проверка gzip-слоя:
gzip -t archive.tar.gzПопытка прочитать структуру tar:
tar -tzf archive.tar.gz >/dev/nullОбщая проверка:
gzip -t archive.tar.gz &&
tar -tzf archive.tar.gz >/dev/null &&
echo 'Архив читается'Проверка ZIP
unzip -t archive.zipПроверка без подробного списка:
unzip -tq archive.zipКонтрольная сумма
Создать SHA-256:
sha256sum archive.tar.gz > archive.tar.gz.sha256Проверить:
sha256sum -c archive.tar.gz.sha256В macOS обычно используется:
shasum -a 256 archive.tar.gzКонтрольная сумма обнаруживает изменение файла, но сама по себе не подтверждает доверенность источника.
Разбиение архивов на части
Разделение tar.gz через split
Создать архив и разбить на части по 1 ГиБ:
tar -czf - project/ |
split -b 1G - project.tar.gz.part-Получатся файлы:
project.tar.gz.part-aa
project.tar.gz.part-ab
project.tar.gz.part-acСобрать и распаковать без промежуточного файла:
cat project.tar.gz.part-* | tar -xzf -Собрать архив:
cat project.tar.gz.part-* > project.tar.gzПорядок частей должен быть правильным.
Разделённый ZIP-архив
Создать ZIP с частями по 1 ГиБ:
zip -r -s 1g project.zip project/Получатся файлы:
project.z01
project.z02
project.zipДля корректной распаковки нужны все части.
Поддержка разделённых ZIP-архивов зависит от программы распаковки. При проблемах можно преобразовать архив в обычный:
zip -s 0 project.zip --out project-full.zipЗатем:
unzip project-full.zipАрхивация через SSH
Создание локального архива удалённого каталога
ssh alice@example.com \
'tar -czf - /var/www/app' \
> app-backup.tar.gzЧтобы не сохранять полный абсолютный путь:
ssh alice@example.com \
'tar -czf - -C /var/www app' \
> app-backup.tar.gzПередача локального каталога на сервер
tar -czf - project/ |
ssh alice@example.com \
'cat > project.tar.gz'Передача с одновременной распаковкой
tar -czf - project/ |
ssh alice@example.com \
'mkdir -p /srv/projects && tar -xzf - -C /srv/projects'Получение архива и немедленная распаковка
ssh alice@example.com \
'tar -czf - -C /var/www app' |
tar -xzf -При потоковой передаче архив не сохраняется локально. Если соединение прервётся, операцию придётся повторить.
Безопасная распаковка
Архив может содержать:
- пути с
../, выходящие из целевого каталога; - абсолютные пути;
- символические ссылки на внешние каталоги;
- файлы с неожиданными владельцами и правами;
- существующие имена, которые будут перезаписаны;
- очень большой объём данных после распаковки;
- множество мелких файлов;
- исполняемые файлы и скрипты.
Перед распаковкой недоверенного архива всегда просматривайте содержимое.
Для tar:
tar -tf archive.tar.gzДля ZIP:
unzip -l archive.zipРаспаковывайте в новый пустой каталог:
mkdir -p archive-review
tar --no-same-owner -xf archive.tar.gz -C archive-reviewИли:
mkdir -p archive-review
unzip archive.zip -d archive-reviewПосле этого проверьте результат:
find archive-review -maxdepth 3 -lsНе распаковывайте недоверенный архив:
- от пользователя
root; - непосредственно в
/; - в домашний каталог поверх существующих файлов;
- в каталог приложения или веб-сервера;
- с автоматическим подтверждением перезаписи.
При распаковке tar от root используйте:
tar --no-same-owner --no-same-permissions \
-xf archive.tar.gz \
-C archive-reviewТочная защита от опасных путей зависит от реализации и версии архиватора. Для особо недоверенных файлов используйте изолированное окружение.
Устранение неполадок
tar: This does not look like a tar archive
Проверьте фактический формат:
file archiveВозможно, файл:
- имеет неправильное расширение;
- повреждён;
- является обычным
.gz, а не.tar.gz; - был загружен не полностью;
- содержит HTML-страницу с сообщением об ошибке.
Для обычного .gz:
gzip -dc file.gz > fileДля .tar.gz:
tar -xzf archive.tar.gzgzip: stdin: not in gzip format
Файл не является gzip-потоком либо повреждён:
file archive.tar.gz
gzip -t archive.tar.gzИногда файл имеет расширение .tar.gz, но фактически является несжатым tar:
tar -tf archive.tar.gzgzip: unexpected end of file
Архив, вероятно, обрезан или загружен не полностью.
Проверьте размер и контрольную сумму:
ls -lh archive.tar.gz
sha256sum archive.tar.gz
gzip -t archive.tar.gztar: ... Cannot open: No such file or directory
Проверьте текущий каталог:
pwd
ls -laИспользуйте абсолютный путь:
tar -xf /home/alice/downloads/archive.tar.gzКаталог для tar -C не существует
Команда tar обычно не создаёт целевой каталог автоматически:
mkdir -p destination
tar -xf archive.tar.gz -C destinationИз архива не извлекается конкретный файл
Проверьте точное имя:
tar -tf archive.tar.gzНапример, в архиве может быть:
./project/README.mdТогда команда должна использовать именно такой путь:
tar -xzf archive.tar.gz ./project/README.mdzip warning: name not matched
Указанный файл не найден либо шаблон был неправильно раскрыт оболочкой.
Проверьте:
ls -la path/to/fileЗаключайте шаблоны в кавычки:
zip archive.zip '*.txt'Если файлы находятся во вложенных каталогах:
zip -r archive.zip project/ -i '*.txt'Неправильно отображаются имена файлов в ZIP
Причиной может быть несовпадение кодировок имён файлов, особенно в старых архивах.
Посмотреть локаль:
localeСовременные ZIP-архивы обычно используют UTF-8, но старые архивы могут хранить имена в другой кодировке. Возможности преобразования зависят от версии unzip.
Архив получился почти такого же размера
Некоторые форматы уже используют сжатие:
- JPEG и PNG;
- MP3 и AAC;
- MP4 и MKV;
- PDF;
.gz,.xz,.zip,.7z;- многие офисные форматы.
Повторное сжатие таких файлов обычно даёт небольшой эффект или увеличивает размер.
Сравнить размеры:
du -sh project/
ls -lh project.tar.gz project.zipНедостаточно места при распаковке
Размер сжатого архива может быть намного меньше распакованных данных.
Проверить свободное место:
df -hДля gzip посмотреть ожидаемый несжатый размер:
gzip -l file.gzДля ZIP:
unzip -l archive.zipДля tar.gz точный суммарный размер можно оценить по списку:
tar -tvf archive.tar.gzФайл начинается с дефиса
Имя вроде -report.txt может быть воспринято как параметр.
Используйте --:
tar -cf archive.tar -- -report.txt
gzip -- -report.txt
zip archive.zip -- -report.txtЛибо укажите путь:
tar -cf archive.tar ./-report.txtШпаргалка
Tar
| Действие | Команда |
|---|---|
Создать .tar |
tar -cf archive.tar directory/ |
| Создать с подробным выводом | tar -cvf archive.tar directory/ |
| Показать содержимое | tar -tf archive.tar |
| Распаковать | tar -xf archive.tar |
| Распаковать в каталог | tar -xf archive.tar -C destination/ |
| Добавить файл | tar -rf archive.tar file.txt |
| Добавить новые версии | tar -uf archive.tar directory/ |
| Исключить файлы | tar -cf archive.tar --exclude='*.log' directory/ |
Tar и gzip
| Действие | Команда |
|---|---|
Создать .tar.gz |
tar -czf archive.tar.gz directory/ |
| Показать содержимое | tar -tzf archive.tar.gz |
| Распаковать | tar -xzf archive.tar.gz |
| Распаковать в каталог | tar -xzf archive.tar.gz -C destination/ |
| Извлечь один файл | tar -xzf archive.tar.gz path/in/archive |
| Убрать верхний каталог | tar -xzf archive.tar.gz --strip-components=1 |
| Проверить gzip-слой | gzip -t archive.tar.gz |
Gzip
| Действие | Команда |
|---|---|
| Сжать файл | gzip file.txt |
| Сжать и сохранить оригинал | gzip -k file.txt |
| Максимальное сжатие | gzip -9 file.txt |
| Распаковать | gunzip file.txt.gz |
Распаковать и сохранить .gz |
gzip -dk file.txt.gz |
| Вывести содержимое | zcat file.txt.gz |
Просмотреть через less |
zless file.txt.gz |
| Поиск в сжатом файле | zgrep 'text' file.txt.gz |
| Проверить целостность | gzip -t file.txt.gz |
Zip
| Действие | Команда |
|---|---|
| Создать ZIP | zip archive.zip file.txt |
| Добавить несколько файлов | zip archive.zip file1 file2 |
| Архивировать каталог | zip -r archive.zip directory/ |
| Максимальное сжатие | zip -9 -r archive.zip directory/ |
| Исключить файлы | zip -r archive.zip directory/ -x '*.log' |
| Обновить архив | zip -ur archive.zip directory/ |
| Удалить файл из архива | zip -d archive.zip path/in/archive |
| Создать архив с паролем | zip -er archive.zip directory/ |
Unzip
| Действие | Команда |
|---|---|
| Показать содержимое | unzip -l archive.zip |
| Распаковать | unzip archive.zip |
| Распаковать в каталог | unzip archive.zip -d destination/ |
| Извлечь один файл | unzip archive.zip path/in/archive |
| Не перезаписывать файлы | unzip -n archive.zip |
| Перезаписывать без вопросов | unzip -o archive.zip |
| Вывести файл в stdout | unzip -p archive.zip path/in/archive |
| Проверить целостность | unzip -t archive.zip |
Минимум для запоминания
tar -cf archive.tar directory/ создать tar
tar -xf archive.tar распаковать tar
tar -tf archive.tar показать содержимое tar
tar -czf archive.tar.gz directory/ создать tar.gz
tar -xzf archive.tar.gz распаковать tar.gz
tar -tzf archive.tar.gz показать содержимое tar.gz
gzip -k file.txt создать file.txt.gz
gunzip file.txt.gz распаковать gzip
gzip -t file.txt.gz проверить gzip
zip -r archive.zip directory/ создать ZIP
unzip -l archive.zip показать содержимое ZIP
unzip archive.zip -d destination/ распаковать ZIP
unzip -t archive.zip проверить ZIPГлавное правило: tar объединяет файлы, gzip сжимает один файл или поток, а zip выполняет упаковку и сжатие одновременно. Перед распаковкой неизвестного архива просмотрите его содержимое и извлекайте файлы в отдельный пустой каталог.