Использование tar в Linux и FreeBSD для работы с архивами. Архивирование файлов в Linux Извлечь tar

В качестве инструмента для архивации данных в Linux используются разные программы. Например , приобретший большую популярность из-за совместимости с ОС Windows. Но это не стандартная для системы программа. Поэтому хотелось бы осветить команду tar Linux - встроенный архиватор.

Изначально tar использовалась для архивации данных на ленточных устройствах. Но также она позволяет записывать вывод в файл, и этот способ стал широко применяться в Linux по своему назначению. Здесь будут рассмотрены самые распространенные варианты работы с этой утилитой.

Синтаксис команд для создания и распаковки архива практически не отличается (в том числе с утилитами сжатия bzip2 или gzip ). Так, чтобы создать новый архив, в терминале используется следующая конструкция:

tar опции архив.tar файлы_для_архивации

Для его распаковки:

tar опции архив.tar

Функции, которые может выполнять команда:

При определении каждой функции используются параметры, которые регламентируют выполнение конкретных операций с tar-архивом:

Как пользоваться tar

С помощью следующей команды создается архив archive.tar с подробным выводом информации, включающий файлы file1 , file2 и file3 :

tar --totals --create --verbose --file archive.tar file1 file2 file3

Но длинные опции и параметры можно заменить (при возможности) однобуквенными значениями:

tar --totals -cvf archive.tar file1 file2 file3

2. Просмотр содержимого архива

Следующая команда выводит содержимое архива, не распаковывая его:

tar -tf archive.tar

3. Распаковка архива tar Linux

Распаковывает архив test.tar с выводом файлов на экран:

tar -xvf archive.tar

Чтобы сделать это в другой каталог, можно воспользоваться параметром -C :

tar -C "Test" -xvf archive.tar

3. Работа со сжатыми архивами

Следует помнить, что tar только создаёт архив, но не сжимает. Для этого используются упомянутые компрессорные утилиты bzip2 и gzip . Файлы, сжатые с их помощью, имеют соответствующие расширения .tar.bz2 и .tar.gz . Чтобы создать сжатый архив с помощью bzip2, введите:

tar -cjvf archive.tar.bz2 file1 file2 file3

Синтаксис для gzip отличается одной буквой в параметрах, и меняется окончание расширения архива:

tar -czvf archive.tar.gz file1 file2 file3

При распаковке tar-архивов с таким расширением следует указывать соответствующую опцию:

tar -C "Test" -xjvf arhive.tar.bz2

tar -xzvf archive.tar.gz

На заметку: архиватор tar - одна из немногих утилит в GNU/Linux, в которой перед использованием однобуквенных параметров, стоящих вместе, можно не ставить знак дефиса.

Выводы

В этой статье была рассмотрена команда tar Linux, которая используется для архивации файлов и поставляется по умолчанию во всех дистрибутивах. В её возможности входит создание и распаковка архива файлов без их сжатия. Для сжатия утилита применяется в связке с популярными компрессорами bzip2 и gzip .

Утилита командной строки tar используется для работы с архивами в операционных системах на базе UNIX. С ее помощью можно архивировать данные и оптимизировать использование дискового пространства.

Создание и распаковка архивов

Создать

Создание выполняется с ключом c . Синтаксис следующий:

tar -c<опции> <новый архивный файл> <что сжимаем>

Пример создания:

tar -czvf archive.tar.gz /home/dmosk

* в данном примере будет создан архив archive.tar.gz домашней директории пользователя (/home/dmosk )
** где z — сжать архив в gzip (без этого параметра, tar не сжимает, а создает так называемый тарбол); c — ключ на создание архива; v — verbose режим, то есть с выводом на экран процесса (очень удобно для наблюдением за ходом работы, но в скриптах можно упустить); f — использовать файл (обязательно указываем, так как в большей степени работаем именно с файлами).

Распаковать

Распаковка выполняется с ключом x с синтаксисом:

tar -x<опции> <архивный файл>

Пример распаковки:

tar -xvf archive.tar.gz

Примеры

gz

Распаковка.gz файла:

tar -xvf archive.tar.gz

* при возникновении ошибки This does not look like a tar archive , можно воспользоваться командой gzip -d archive.tar.gz .

bz2

tar -xvjf archive.tar.bz2

* ключ j отвечает за работу с bz2.

Если система ругается на bzip2, значит нужно его установить:

yum install bzip2

apt-get install bzip2

pkg install bzip2

* соответственно, для CentOS (RPM based), Ubuntu (deb based), FreeBSD (BSD based).

Если видим ошибку tar: Unrecognized archive format , воспользуемся следующей командой:

bzip2 -d archive.tar.bz2

gzip

tar -xvzf archive.tar.gzip

* ключ z отвечает за работу с gzip.

tgz

Распаковывается, как gzip:

tar -xvzf archive.tgz

Распаковать в определенную папку

tar -C /home/user -xvf archive.tar.gz

* ключ -C используется для указания папки, куда необходимо распаковать файлы из архива.

Распаковка без вложенной папки

Такой способ можно использовать для распаковки в заранее подготовленный каталог. Будет некий эффект переименовывания каталога или аналог «Распаковать здесь»:

tar -C /home/admin/mytar -xvf admin.tar.gz --strip-components 1

* каталог /home/admin/mytar заранее должен быть создан; --strip-components 1 пропустит одну вложенную папку внутри архива.

Исключение файлов по маске

Если необходимо пропустить некоторые файлы, вводим команду с ключом --exclude:

tar -czvf archive.tar.gz /wwwsite --exclude="sess_*"

* в данном примере мы создадим архив archive.tar.gz , в котором не будет файлов, начинающихся на sess_ .

Описание ключей tar

Команды для действия

* нельзя использовать несколько вышеперечисленных ключей в одной команде.

Дополнительные опции

Ключ Описание
--atime-preserve Оставить прежнюю метку времени доступа для файла.
-b N Задать размер блока N x 512.
-C Смена каталога. По умолчанию, используется тот, в котором мы находимся.
--checkpoint Показать имена папок при чтении архивного файла.
-G Использование старого формата инкрементального резервирования при отображении или извлечения.
-g Использование нового формата инкрементального резервирования при отображении или извлечения.
-h Не дублировать символьные ссылки. Только файлы, на которые указывают эти симлинки.
-i Игнорировать блоки нулей.
-j Использование bzip2.
--ignore-failed-read Игнорировать не читаемые файлы.
-k При распаковке, существующие файлы не заменяются соответствующими файлами из архива.
-L N Смена магнитной ленты после N*1024 байт.
-m При извлечении игнорировать время модификации объекта.
-M Многотомные архивы.
-N DATE Сохранять только более новые файлы относительно DATE
-O Направление извлекаемого на стандартный вывод.
-p Извлечение защищенной информации.
-P Не отбрасывает начальный слэш (/) из имен.
-s Сортировка файлов при извлечении.
--preserve Аналогично -ps
--remove-files Удалить исходные файлы после добавления в архив.
--same-owner Сохранить владельца при извлечении.
--totals Вывод байт при создании архива.
-v Протоколирование действий — отображение списка объектов, над которыми происходит действие.
-V NAME Создание архива на томе с меткой NAME.
--version Показать версию tar.
-w Требовать подтверждения для каждого действия.
-W Проверка архива после записи.
--exclude FILE Исключить файл FILE.
-X FILE Исключить файлы FILE.
-Z Фильтрует архив с помощью compress.
-z Использование gzip.

* актуальный список опций можно получить командой man tar .

К оманда “tar” в Linux используется для создания архива файлов и каталогов. С помощью команды “tar” вы можете создать архивный файл в форматах: “.tar “, “.tar.gz “, “.tar.bz2 ”. Они известны как “tarball “, “gizp “, “bzip ” в . Tar обладает большей гибкостью, чем ZIP, который широко используется в кросс-платформенной среде.

Мы покажем примеры команды tar в этой статье.

Во-первых, посмотрите, сколько опции доступны для команды

Основной режим работы:

  • -А, -catenate, -concatenate Добавить файлы в архив tar
  • -c, -create создать новый архив
  • -d, -diff, -compare найти различия между архивом и файловой системой
  • -delete удалить из архива (не на магнитных лентах!)
  • -r, -append добавление файлов в конец архива
  • -t, -list список содержимое архива
  • -test-label проверить метку тома архива и выхода
  • -u, -update только добавить более новые файлы в архив
  • -x, –extract, –get извлечение файлов из архива

Параметры сжатия:

  • -a, -auto-compress суффикс использование архива для определения сжатия программы
  • -I, –use-compress-program=PROG фильтр через PROG (должен принять -d)
  • -j, -bzip2 фильтр архивации через bzip2
  • -J, -xz фильтровать архивации через XZ
  • -lzip фильтровать архивации через Lzip
  • -lzma фильтровать архивации через lzma
  • -lzop
  • -no-авто-compress не использовать суффикс архива для определения программы сжатия
  • -z, -gzip, -gunzip, -ungzip фильтровать архив через GZIP
  • -Z, -compress, -uncompress фильтровать архив через компрессию

Я выбираю инсталлятор для демонстрации. Общий размер программы установки 26MB. Мы будем проверять заархивированный размер файла каждого предложенного метода сжатия.

1. Создание файлового архива с помощью tar

Архив Tar делает сжатие файлов и папок автоматически. Архивный могут храниться на диске или могут перенести на другой диск или он может быть использован для вложения электронной почты.

Tar -caf wordpress.tar wordpress/

Размер архива сводится к 23MB.

2. Создать файловый архив tar.gz

GZ выступает за Gunzip. .tar.gz архив может сжимать файлы и папки эффективным образом.

Tar -czf wordpress.tar.gz wordpress/

Размер архива сводится к 7.6Mb. Довольно внушительный!

# ls -lh -rw-r--r-- 1 root root 23M Jan 5 22:09 wordpress.tar -rw-r--r-- 1 root root 7.6M Jan 5 22:15 wordpress.tar.gz

3. Создать tar.bz2 архив

BZIP является более эффективным, чтобы уменьшить размер файла архива.

Tar -cjf wordpress.tar.bz2 wordpress/

Размер архива сводится к 6.9MB.

# ls -lh -rw-r--r-- 1 root root 23M Jan 5 22:09 wordpress.tar -rw-r--r-- 1 root root 6.9M Jan 5 22:27 wordpress.tar.bz2 -rw-r--r-- 1 root root 7.6M Jan 5 22:26 wordpress.tar.gz

4. Файловый архив Untar tar

Удобство и простота использования любого архива, если полезно, когда он может быть легко распакован. Распакуйте файл .tar

Tar -xf wordpress.tar or tar -xf wordpress.tar /home/andreyex/extracted

‘Х’ обозначает распаковка.

5. Распакуйте файл архива tar.gz

tar -xzf wordpress.tar.gz

6. Распаковка файловый архив tar.bz2

tar -xjf wordpress.tar.bz2 tar tf wordpress.tar wordpress/ wordpress/wp-blog-header.php wordpress/wp-login.php wordpress/wp-config-sample.php wordpress/wp-admin/ wordpress/wp-admin/link-parse-opml.php wordpress/wp-admin/ms-upgrade-network.php wordpress/wp-admin/themes.php

8. Untar конкретный файл из архивного файла tar

tar -xf wordpress.tar wordpress/wp-config-sample.php

Это все на данный момент. Таковы основные примеры команды tar в Unix/Linux.


Простая схема резервирования состоит в том, чтобы все сохранить однажды, а затем резервировать все что изменилось, начиная с предыдущей копии. Первая копия называется полной (full backup) , последующие инкрементными (incremental backups) . Полная копия часто не помещается целиком на ленту (или дискету). Восстановление из инкрементных копий может потребовать во много раз большего количество работы, чем из полного. Восстановление может быть оптимизировано так, чтобы Вы всегда резервировали все, начиная с предыдущей полной копии; этот путь требует немного больше работы, но никогда не будет потребности восстановить больше, чем полную и одну инкрементную копию.

Если Вы хотите делать копии ежедневно и иметь шесть лент, Вы могли бы использовать ленту 1 для первой полной копии (скажем, в пятницу) и ленты со 2 по 5 для инкрементных копий (понедельник-четверг). Затем Вы делаете новую полную копию на ленте 6 (вторая пятница), и снова начинаете делать инкрементные копии на лентах 2-5. Вы не хотите перезаписывать ленту 1, пока вы не имеете новую полную копию, чтобы ничего страшного не произошло в то время, пока вы делаете новую полную копию. После того, как вы сделали полную копию на ленте 6, Вы можете хранить ленту 1 где-нибудь еще на случай разрушения ваших других резервных лент. Когда Вы должны сделать следующую полную копию, Вы выбираете и используете ленту 1.

Если Вы имеете больше чем шесть лент, Вы можете использовать дополнительное место для полных копий. Каждый раз, когда Вы делаете полную копию, Вы используете самую старую ленту. Этим путем Вы можете иметь полные копии за несколько предыдущих недель, что хорошо, если Вы хотите найти старый, теперь удаленный файл, или старую версию файла.

Резервирование с применением tar

Полная копия может легко быть сделана командой tar :

# tar --create --file /dev/ftape /usr/src

Пример выше использует GNU версию tar и длинные имена опции. Традиционная версия tar понимает только одиночный символ в качестве парамета. GNU версия может также обрабатывать копии, которые не помещаются на одной ленте или дискете, и очень длинные пути; не все традиционные версии могут делать это. Linux использует только GNU tar .

Если ваша копия не помещается на одной ленте, Вы должны использовать опцию --multi-volume (-M ):

# tar -cMf /dev/fd0H1440 /usr/src

tar: Removing leading / from absolute path names in the archive

Prepare volume #2 for /dev/fd0H1440 and hit return:

Обратите внимание, что Вы должны форматировать дискеты прежде, чем Вы начнете копирование. Можно использовать другое окно или виртуальный терминал для выполнения команд форматирования, когда tar попросит новую дискету.

После того, как вы сделали копию, Вы должны ее проверить, используя опцию --compare (-d ):

# tar --compare --verbose -f /dev/ftape

usr/src/

usr/src/linux

....

Невыполнение проверки копии означает, что Вы не заметите, что ваша копия не работает, пока не потеряете первоначальные данные.

Инкрементная копия может быть выполнена командой tar с опцией --newer (-N ):

# tar --create --newer "8 Sep 1995" --file /dev/ftape /usr/src --verbose

tar: Removing leading / from absolute path names in the archive

usr/src/

usr/src/linux-1.2.10-includes/

usr/src/linux-1.2.10-includes/include/linux/modules/

usr/src/linux-1.2.10-includes/include/asm-generic/

usr/src/linux-1.2.10-includes/include/asm-i386/

usr/src/linux-1.2.10-includes/include/asm-mips/

usr/src/linux-1.2.10-includes/include/asm-alpha/

usr/src/linux-1.2.10-includes/include/asm-m68k/

usr/src/linux-1.2.10-includes/include/asm-sparc/

usr/src/patch-1.2.11.gz

К сожалению, tar не может обнаружить изменение Inode информации файла, например, изменение прав доступа или переименование файла. Проблема решается путем использования команды find и сравнения текущего состояния файловой системы со списками файлов, которые резервировались раньше. Скрипты и программы для автоматизации такого процесса можно найти на ftp-серверах, посвященных Linux.

Восстановление с применением tar

Команда tar с опцией --extract (-x ) извлекает файлы:

# tar --extract --same-permissions --verbose --file /dev/fd0H1440

usr/src/

usr/src/linux

usr/src/linux-1.2.10-includes/

usr/src/linux-1.2.10-includes/include/

usr/src/linux-1.2.10-includes/include/linux/

...

Вы также можете извлечь только указанные файлы или каталоги (которые включают все их файлы и подкаталоги),перечислив их в командной строке:

# tar xpvf /dev/fd0H1440 usr/src/linux-1.2.10-includes/include/linux/hdreg.h

usr/src/linux-1.2.10-includes/include/linux/hdreg.h

Используйте опцию --list (-t ), если Вы хотите только увидеть какие файлы находятся на резервном томе:

# tar --list --file /dev/fd0H1440

usr/src/

usr/src/linux

usr/src/linux-1.2.10-includes/

usr/src/linux-1.2.10-includes/include/

usr/src/linux-1.2.10-includes/include/linux/

usr/src/linux-1.2.10-includes/include/linux/hdreg.h

usr/src/linux-1.2.10-includes/include/linux/kernel.h

...

Обратите внимание, что tar всегда читает резервный том последовательно, так для больших томов процесс довольно медленный. Однако, нельзя использовать произвольный доступ, когда используется лента или некоторая другая последовательная среда.

tar не обрабатывает удаленные файлы правильно. Если Вы должны восстановить файловую систему из полной и инкрементной копии, и удалили файл между изготовлением копий, он будет существовать снова после того, как Вы сделаете восстановление. Это может быть большой проблемой, если файл хранит важные данные, которые больше не должны быть доступны.



man tar Использование: tar [ОПЦИЯ...] [ФАЙЛ]...
GNU `tar" предназначен для сохранения файлов
на магнитную ленту или в архив на диске и
для восстановления отдельных файлов из
архива.

Примеры:
tar -cf archive.tar foo bar # Создание archive.tar из файлов
foo и bar.
tar -tvf archive.tar # Вывод подробного списка
всех файлов в архиве archive.tar.
tar -xf archive.tar # Извлечение всех файлов
из archive.tar.

Основной режим работы:

A, --catenate, --concatenate присоедининие tar-файлов
к архиву
-c, --create создание нового архива
-d, --diff, --compare поиск различий между
архивом и файловой
системой
--delete удаление из архива (не на
магнитных лентах!)
-r, --append добавление файлов в конец
архива
-t, --list вывод списка содержимого
архива
--test-label проверка метки тома архива
и выход
-u, --update добавление в архив только
более новых файлов
-x, --extract, --get извлечение файлов из
архива

Модификаторы:

Check-device check device numbers when
creating incremental
archives (default)
-g, --listed-incremental=ФАЙЛ
обработка добавочного
резервирования нового
формата GNU
-G, --incremental обработка добавочного
резервирования старого
формата GNU
--ignore-failed-read не завершать работу при
ненулевом статусе для
нечитаемых файлов
-n, --seek доступен поиск по архиву
--no-check-device do not check device numbers when creating
incremental archives
--occurrence[=N] обработка только N-ого
вхождения для каждого
файла в архиве. Эта опция
верна только в сочетании с
одной из подкоманд --delete,
--diff, --extract или --list, и когда
список файлов задан либо в
командной строке, либо
через опцию -T. По умолчанию
N равен 1.
--sparse-version=MAJOR[.MINOR]
установить версию
используемого формата
разрежения (подразумевает
--sparse)
-S, --sparse эффективная обработка
разрежённых файлов

Управление перезаписью:

K, --keep-old-files не перезаписывать
существующие файлы при
извлечении
--keep-newer-files не перезаписывать
существующие файлы,
которые более новые, чем их
копии в архиве
--no-overwrite-dir сохранение метаданных
существующих каталогов
--overwrite перезапись существующих
файлов при извлечении
--overwrite-dir перезапись существующих
файлов при извлечении (по
умолчанию)
--recursive-unlink очистка всей иерархии до
извлечения каталога
--remove-files удаление файлов после их
добавления в архив
-U, --unlink-first удаление каждого файла до
извлечения поверх него
-W, --verify попытка проверить архив
после его записи

Выбор выходного потока:

Ignore-command-error игнорировать коды
завершения дочерних
процессов
--no-ignore-command-error считать ненулевые коды
завершения дочерних
процессов как ошибку
-O, --to-stdout извлекать файлы на
стандартный вывод
--to-command=КОМАНДА
перенаправлять
извлечённые файлы в другую
программу

Обработка атрибутов файлов:

Atime-preserve[=СПОСОБ]
сохранять время доступа
скопированных файлов путём
восстановления времени
после чтения (СПОСОБ="replace";
используется по умолчанию)
или не установки времени в
первую очередь
(СПОСОБ="system")
--delay-directory-restore не устанавливать время
изменения и права доступа
извлечённых каталогов до
завершения процесса
извлечения
--group=ИМЯ принудительно
устанаваливать ИМЯ в
качестве группы для
добавленных файлов
--mode=РЕЖИМ принудительно
устанавливать (символьный)
РЕЖИМ доступа для
добавляемых файлов
--mtime=ДАТА-ИЛИ-ФАЙЛ
устанаваливать для
добавленных файлов mtime из
ДАТЫ-ИЛИ-ФАЙЛА
-m, --touch не извлекать время
изменения файла
--no-delay-directory-restore
отменить действие опции
--delay-directory-restore
--no-same-owner извлекать файлы как свои
собственные
--no-same-permissions применять umask пользователя
при извлечении прав
доступа из архива (по
умолчанию для обычных
пользователей)
--numeric-owner использовать числа вместо
имён владельца/группы
--owner=ИМЯ принудительно
устанаваливать ИМЯ в
качестве владельца для
добавленных файлов
-p, --preserve-permissions, --same-permissions
извлекать информацию о
правах доступа к файлу (по
умолчанию для
суперпользователя)
--preserve эквивалент -p и -s
--same-owner попытаться извлечь файлы с
тем же владельцем
-s, --preserve-order, --same-order
сортировать извлекаемые
имена в том же порядке, что
и в архиве

Выбор и переключение устройств:

F, --file=АРХИВ использовать файл или
устройство АРХИВ
--force-local файл архива является
локальным, даже если
содержит двоеточие
-F, --info-script=ИМЯ, --new-volume-script=ИМЯ
запустить скрипт по
окончании каждой ленты
(подразумевается
использование -М)
-L, --tape-length=N сменить ленту после записи
ЧИСЛО x 1024 байт
-M, --multi-volume
создание/листинг/извлечение
многотомных архивов
--rmt-command=КОМАНДА
использовать указанную
КОМАНДУ rmt вместо rmt
--rsh-command=КОМАНДА
использовать удалённую
КОМАНДУ вместо rsh
--volno-file=ФАЙЛ использовать/обновлять
номера тома в ФАЙЛЕ

Разбиение на блоки:

B, --blocking-factor=БЛОКИ
число БЛОКОВ x 512 байт на
запись
-B, --read-full-records заново разбивать на блоки
при чтении (для каналов
4.2BSD)
-i, --ignore-zeros игнорировать нулевые блоки
в архиве (т.е. EOF)
--record-size=N ЧИСЛО байт на запись,
кратное 512

Формата архива:

H, --format=ФОРМАТ создать архив в указанном
формате

ФОРМАТОМ может быть:

Gnu формат GNU tar 1.13.х
oldgnu формат GNU как в tar <= 1.12
pax формат POSIX 1003.1-2001 (pax)
posix эквивалент pax
ustar формат POSIX 1003.1-1988 (ustar)
v7 старый формат tar V7

Old-archive, --portability
эквивалент --format=v7

Pax-option=keyword[[:]=значение][,keyword[[:]=значение]]
управляющие ключевые слова
pax
--posix эквивалент --format=posix
-V, --label=ТЕКСТ создать архив с именем тома
ТЕКСТ; при
листинге/извлечении
использовать ТЕКСТ в
качестве шаблона
подстановки

Compression options:

A, --auto-compress use archive suffix to determine
the compression program
-j, --bzip2 пропустить архив через bzip2
--lzma filter the archive through lzma
--use-compress-program=ПРОГ
пропустить архив через
ПРОГ (должна поддерживать
-d)
-z, --gzip, --gunzip, --ungzip пропустить архив через
gzip
-Z, --compress, --uncompress пропустить архив через
compress

Выбор локальных файлов:

Add-file=ФАЙЛ добавить указаный ФАЙЛ в
архив (полезно, если имя
начинается с дефиса)
--backup[=УПРАВЛЕНИЕ]
делать копию перед
удалением, УПРАВЛЕНИЕ
выбора версий
-C, --directory=КАТАЛОГ перейти в КАТАЛОГ
--exclude=ШАБЛОН исключать файлы,
определённые ШАБЛОНОМ
--exclude-caches исключать содержимое
каталогов с файлом CACHEDIR.TAG
за исключением самого
файла с тегами
--exclude-caches-all исключать каталоги,
содержащие файл CACHEDIR.TAG
--exclude-caches-under исключать всё содержимое
каталогов, содержащих файл
CACHEDIR.TAG
--exclude-tag=ФАЙЛ исключать каталоги,
содержащие ФАЙЛ, за
исключением самого ФАЙЛА
--exclude-tag-all=ФАЙЛ исключать каталоги с
ФАЙЛОМ
--exclude-tag-under=ФАЙЛ
исключать всё содержимое
каталогов, содержащих ФАЙЛ
--exclude-vcs исключать каталоги CVS
-h, --dereference следовать по символьным
ссылкам и сохранять файлы,
на которые они указывают
--hard-dereference follow hard links; archive and
dump the files they
refer to
-K, --starting-file=ИМЯ-ЧЛЕНА
начинать с члена ИМЯ-ЧЛЕНА
в архиве
--newer-mtime=ДАТА сравнивать дату и время,
только если изменены
данные
--no-recursion отключить автоматический
спуск в каталоги
--no-unquote не убирать кавычки с имён
файлов, прочитанных с
опцией -T
--null -T читает строки,
оканчивающиеся нулём,
отключает опцию -C
-N, --newer=ДАТА-ИЛИ-ФАЙЛ, --after-date=ДАТА-ИЛИ-ФАЙЛ
сохранять только те файлы,
которые новее
ДАТЫ-ИЛИ-ФАЙЛА
--one-file-system оставаться в локальной
файловой системе при
создании архива
-P, --absolute-names не удалять начальные `/" из
имен файлов
--recursion рекурсивный спуск по
каталогам (по умолчанию)
--suffix=СТРОКА делать копию перед
удалением, переопределяет
обычный суффикс ("~", если
только он не переопределён
переменной окружения
SIMPLE_BACKUP_SUFFIX)
-T, --files-from=ФАЙЛ загрузить из ФАЙЛА имена
для извлечения или
создания
--unquote убрать кавычки с имён
файлов, прочитанных с
опцией -T (по умолчанию)
-X, --exclude-from=ФАЙЛ исключать шаблоны,
перечисленных в ФАЙЛЕ

Преобразвание имён файлов:

Strip-components=N удалять указанное ЧИСЛО
начальных компонентов из
имён файлов перед
извлечением
--transform=РАСШИРЕНИЕ
использовать замену
РАСШИРЕНИЯ sed"ом для
преобразования имён файлов

Параметры шаблонов подстановки для имён
файлов (вляют на шаблюны включения и
исключения):

Anchored шаблоны начала имени файла
--ignore-case игноририровать регистр
--no-anchored шаблоны после любого "/" (по
умолчанию для исключаемых)
--no-ignore-case с учётом регистра (по
умолчанию)
--no-wildcards точное соответствие
строке
--no-wildcards-match-slash маски не соответствуют
"/"
--wildcards использовать маски (по
умолчанию для исключаемых)
--wildcards-match-slash маски соответствут "/" (по
умолчанию для исключаемых)

Вывод информации:

Checkpoint[=N] вывод сообщений о ходе
выполнения через каждые
ЧИСЛО записей (по умолчанию
10)
--checkpoint-action=ACTION execute ACTION on each checkpoint
--index-file=ФАЙЛ отправить подробный вывод
данных в FILE
-l, --check-links вывод сообщений, если
сохранены не все ссылки
--no-quote-chars=СТРОКА
отключить цитирование
символов из СТРОКИ
--quote-chars=СТРОКА дополнительно
цитировать символы из
СТРОКИ
--quoting-style=СТИЛЬ установить стиль
цитирования имён. Значения
для СТИЛЯ см. ниже
-R, --block-number выводить номера блоков
архива в каждом сообщении
--show-defaults показать значения tar по
умолчанию
--show-omitted-dirs при выводе листинга или
извлечении показывать все
каталоги, не
соответствующем условию
поиска
--show-transformed-names, --show-stored-names
показывать имена файлов
или архивов после
преобразования
--totals[=СИГНАЛ] вывод общего числа байт
после обработки архива; с
аргументом - вывод общего
числа байт после доставки
этого СИГНАЛА. Разрешённые
сигналы: SIGHUP, SIGQUIT, SIGINT, SIGUSR1
и SIGUSR2. Также разрешается
использовать имена без
префикса SIG
--utc вывод даты изменения файла
в формате UTC
-v, --verbose подробный листинг
обрабатываемых файлов
-w, --interactive, --confirmation
запрашивать подтверждение
для каждого действия

Опции совместимости:

O при создании, эквивалент
--old-archive; при извлечении,
эквивалент --no-same-owner

Другие опции:

Help вывод этой справки
--restrict отключить использование
некоторых потенциально
опасных опций
--usage вывод короткого сообщения
об использовании
--version вывод версии программы

Обязательные или необязательные аргументы
для длинный опций также являются
обязательными или необязательными для
соответствующих коротких опций.

Суффикс для резервных копий - `~", если он не
установлен через --suffix
или SIMPLE_BACKUP_SUFFIX. Управление версиями может
быть установлено
через --backup или VERSION_CONTROL. Значениями могут
быть:

None, off не создавать резервные копии
t, numbered создавать нумерованные
резервные копии
nil, existing нумерованные, если существуют
нумерованные копии, иначе простые
never, simple всегда создавать простые
резервные копии

Допустимые агрументы для опций --quoting-style:

Literal
shell
shell-always
c
c-maybe
escape
locale
clocale

Значения по умолчанию *этого* tar:
--format=gnu -f- -b20 --quoting-style=escape --rmt-command=/usr/sbin/rmt
--rsh-command=/usr/bin/rsh

На Unix (это Linux , Freebsd и др.) системах команда tar является главной архивирующей утилитой. Понимание множества опций этой команды позволит вам мастерски манипулировать архивами.

В этой статье я хотел бы рассмотреть разные примеры, включающие в себя создание tar архива (с использованием gzip и bzip сжатия), распаковка отдельного файла или директории, просмотр содержимого tar архива, валидация целостности tar архива, выяснение разницы между tar архивом и файловой системой, вычисление размера архива перед его созданием и другие.

Создание архива с использованием команды tar

Создание и распаковка tar архива производится с использованием опции cvf. Вот так выглядит базовая команда для создания архива:

$ tar cvf archive_name.tar dirname/

Разберем каждый ключ из опции по отдельности:

  • c – создание нового архива
  • v – вывод списка файлов к обработке
  • f – имя файла архива

Чтобы создать архив сжатый gzip нужно использовать опцию cvzf. Предыдущая опция cvf абсолютно не использует какого-либо сжатия. Чтобы использовать gzip сжатие добавьте опцию z как показано ниже:

$ tar cvzf archive_name.tar.gz dirname/

  • z – упаковывает архив используя gzip сжатие

Лично предпочитаю всегда оставлять опцию cvf без изменений и только лишь в конце дописывать необходимые ключи если потребуется сжатие. Например, cvfz или cvfj. Так легче запоминается.

Теперь давайте создадим архив используя bzip2 сжатие:

$ tar cvfj archive_name.tar.bz2 dirname/

  • j – упаковывает архив используя bzip2 сжатие

gzip или bzip2? Сжатие и распаковка архива при помощи bzip2 занимает несколько больше времени и сам архив получается меньшего размера.

Создание tar архива с текущей датой в имени архива

Если вы создаете бекап, то очень важно знать, когда именно он был создан. Проще всего узнать об этом можно из его имени.

Tar -cvf archive-$(date +%Y%m%d).tar.gz dirname/

Распаковка архива с использованием команды tar

Для распаковки архива используется команда xvf:

$ tar xvf archive_name.tar

  • x – извлечение файлов из архива

Чтобы распаковать tar.gz используйте опцию xvfz:

$ tar xvfz archive_name.tar.gz

Чтобы распаковать архив сжатый bzip2 используйте опцию xvfj:

$ tar xvfj archive_name.tar.bz2

Просмотр файлов в архиве tar

Чтобы посмотреть содержимое tar архива используйте опцию tvf.

$ tar tvf archive_name.tar

Чтобы посмотреть содержимое архива сжатого при помощи gzip воспользуйтесь опцией tvfz

$ tar tvfz archive_name.tar.gz

Чтобы посмотреть содержимое архива сжатого при помощи bzip2 воспользуйтесь опцией tvfj

$ tar tvfj archive_name.tar.bz2

Извлечение отдельного файла из tar, tar.gz, tar.bz2 архивов

Бывают ситуации, когда из большого архива требуется извлечь только 1 файл:

$ tar xvf archive_file.tar path/to/file

Для сжатых gzip и bzip2 архивов соответственно используйте:

$ tar xvfz archive_file.tar.gz path/to/file $ tar xvfj archive_file.tar.bz2 path/to/file

Извлечение отдельной папки из tar, tar.gz, tar.bz2 архивов

Извлечение отдельной папки, включая все подпапки и файлы, производится также, как и извлечение отдельного файла:

$ tar xvf archive_file.tar /path/to/dir/

Чтобы извлечь несколько папок из архива указывайте их имена по порядку:

$ tar xvf archive_file.tar /path/to/dir1/ /path/to/dir2/

Для сжатых архивов то же самое, только с использованием соответственно дополнительных ключей:

$ tar xvfz archive_file.tar.gz /path/to/dir/ $ tar xvfj archive_file.tar.bz2 /path/to/dir/

Извлечение группы файлов из tar, tar.gz, tar.bz2 архивов с использованием регулярных выражений

Чтобы извлечь группу файлов по определенных признакам в имени вы можете использовать регулярные выражения. К примеру, давайте извлечем из архива все файлы с расширением html.

$ tar xvf archive_file.tar --wildcards "*.pl"

Добавление файла или папки в существующий архив tar

Для добавления нового файла или папки в уже существующий архив используйте опцию -r:

$ tar rvf archive_name.tar newfile

Добавление папки проводится по аналогии:

$ tar rvf archive_name.tar newdir/

Помните, что операция добавления файлов и папок работает только для не сжатых tar архивов.

Определение tar размера архива перед его созданием

Следующая команда позволяет определить размер tar.gz или tar.bz2 архива перед его созданием (в KB)

Tar -czf - /directory/to/archive/ | wc –c $ tar -cjf - /directory/to/archive/ | wc -c