Архиватор tar совместно с компрессором gzip в сообществе Linux это довольно часто используемый инструмент не только для создания сжатых архивов, но и для переноса файлов с одной системы на другую, поскольку позволяет проще копировать ссылки и сбрасывать атрибуты разрешения доступа, привязанные к пользователям и группам.
[Упаковка и распаковка]
Ниже показана команда упаковки файлов и папок в архив gzip, без сохранения атрибутов доступа. Вместо имен файлов и папок можно указывать wildcard-шаблоны наподобие *.c, *, *.h?? и т. п. Опция c задает создание архива (compress), z тип компрессии (.gz), f указывает файл как места назначения (file).
$ tar -czf имя_архива.tar.gz файл1 файл2 папка1 папка2 ...
Ниже показана распаковка. Запомнить команду просто, здесь вместо c указывается x, что означает извлечение из архива (eXtraction). Если путь_назначения не указан, то содержимое архива будет извлечено в текущий каталог.
$ tar -xzf имя_архива.tar.gz путь_назначения
Можно вместо z можно указать другой вид компрессии: маленькая j задает bzip2 (.bz2), заглавная J задает xz (.xz). Дефис '-' при для опций можно не указывать.
Распаковка с выводом списка распакованных файлов:
$ tar -xvf img.tar fwu.sh
rootfs
uImage
fwu_ver
hw_ver
md5.txt
[Как вывести содержимое архива tar.gz]
Иногда бывает необходимо "заглянуть" в архив, чтобы найти какой-то конкретный файл. Сделать это можно следующими командами, в которых указана опция t [1]. Опция v задает подробный вывод информации (verbose):
$ tar -ztvf имя_архива.tar.gz
$ tar -tvf имя_архива.tar.gz
$ tar -tvf имя_архива.tar.gz шаблон_поиска
Если нужно просмотреть содержимое не сжатого tar-архива, то можно пропустить некоторые опции.
Пример 1. Просмотр списка содержимого не сжатого tar-архива file.tar:
$ tar -tvf file.tar
Пример 2. Просмотр списка содержимого архива file.tar.gz:
$ tar -ztvf file.tar.gz
Пример 3. Просмотр списка содержимого архива file.tar.bz2:
$ tar -jtvf file.tar.bz2
Пример 4. Поиск определенных файлов. Ниже в примере показан поиск файлов на языке C, у которых расширение *.c в архиве projects.tar.bz2.
$ tar -tvf projects.tar.bz2 --wildcards '*.c'
Конечно, выводимый список можно фильтровать с помощью | grep маска, например:
$ tar -tvf projects.tar.bz2 | grep '*.c'
[Как распаковать только один файл (или только одну папку)]
Иногда архив большой, распаковывается целиком долго, а нужно извлечь только один файл (или папку с файлами). Сначала командой с опцией t и фильтрацией grep надо узнать полное имя файла, как он сохранен в архиве [1]. Например, нас интересует папка rtl819x:
$ tar -jtvf file.tar.bz2 | grep rtl819x
Предположим, что путь до нужной нам папки sdk/rtl819x, тогда извлечь её можно командой [2]:
$ tar -zxvf file.tar.gz sdk/rtl819x
[Краткий справочник]
-f filename : использовать имя архива filename.
-j : фильтрация архива по bzip2, используется для распаковки tar-файлов .bz2.
-J (заглавная J): фильтрация архива по xz, используется для распаковки tar-файлов .xz.
-t : вывести список содержимого архива.
-v : вывод подробного списка обрабатываемых файлов.
--wildcards : использовать шаблон для сопоставления с именами файлов. Вместе с wildcards dы должны использовать одну из опций из '-Acdtrux', '--delete' или '--test-label'.
-x filename : распаковка архива.
-z : фильтрация архива по gzip, с которой мы можем открыть сжатый (т. е. распаковать) tar-файл .gz.
Краткую справку по всем опциям можно получить командой tar --help, подробную справку командой man tar.
[Ссылки]
1. List the contents of a tar or tar.gz file site:cyberciti.biz. 2. How to extract specific file(s) from tar.gz site:stackexchange.com. |