Задание имен TAR
5.1 Изменение имени архива *По умолчанию tar использует имя архивного файла, откомпилированного
при установке tar. Обычно это относится к некоторым физическим
ленточным устройствам машины. Часто инсталлятор tar вообще не
устанавливает ничего по умолчанию.
В результате большинству пользователей tar приходится сообщать ему,
где искать архив. Опция '--file=имя_архива' выбирает для использования
в качестве архива другой файл.
Если в имени архивного файла есть двоеточие, то имеется в виду, что
он на другой машине. Если архивный файл - 'user@host:file', то файл
file используется на машине host. Отдаленная машина позволяет
использовать программу rsh с именем пользователя user. Если имя
пользователя не указывается (перед знаком @), используется ваше имя
(это обычное поведение rsh). Если необходимо для удаленной машины,
кроме разрешения вам доступа к rsh, устанавливается программа
'/usr/ucb/rmt'. Если вам нужно использовать файлы, в имена которых
входит двоеточие, то работу удаленного ленточного учтройства можно
заблокировать с помощью опции '--force-local'.
Если вы даете в качестве имени файла в '--file=имя_архива' тире, tar
читает архив со стандартного ввода (или записывает на стандартный
вывод).
Имя архива
Архив можно сохранить как файл в системе файлов, послать через канал
или сеть, или записать на устройство I/O как на ленту или диск. Чтобы
задать имя архива, испльзуйте опцию '--file=имя_архива'.
Имя архива может быть именем обыкновенного файла или устройства I/O.
tar всегда нужно имя архива: если вы его не задаете, используется
- 95 -
переменная среды TAPE или, если она не задана, имя архива для
умолчания - обычно это имя /dev/tu00.
Если вы используете тире в качестве имени архива, tar читает архив
со стандартного ввода (при составлении списка извлеченных файлов), или
записывает его на стандартный вывод (при создании архива). Если вы
используете тире как имя архива при модификации архива, tar читает
первоначальный архив со стандартного ввода и записывает весь новый
архив на стандартный вывод.
FIXME: производится ли переназначение стандартных ввода и вывода с
помощью всех операций? Нужно привести пример стандартного ввода
и вывода (экран и клавиатура?)
Чтобы задать архивный файл на устройстве, подсоединенном к
отдаленной машине, используйте следующее:
--file=имя_машины:/устройство/имя_файла
tar, если возможно, завершает дистанционную связь, выводит
приглашение имени пользователя и запрашивает пароль. Если вы
используете '--file=имя_машины:/устройство/имя_файла', tar завершает
дистанционную связь, используя ваше имя как пользователя на отдаленной
машине.
FIXME: Ясно ли это?
'--file=имя_архива'
'-f имя_архива'
Называет архив для создания или оперирования. Используется в
сочетании с другой операцией.
Выбор членов архива
Аргументы имени файла задают, с какими файлами системы файлов tar
должен работать при создании или добавлении архива, или то, с какими
членами архива tar должен работать при чтении архива или удалении
членов из него.
- 96 -
FIXME: pxref Reading and Writing
Чтобы задать имена файлов, вы можете напечатать их в качестве
последних аргументов на командной строке. Например:
tar операция [опция1 опция2 ...][имя_файла_1 имя_файла_2 ...]
Если вы задаете имя каталога как аргумент имени файла, tar оперирует
всеми файлами этого каталога.
Если вы не задаете файлы при вызове tar, он оперирует всеми
некаталоговыми файлами рабочего каталога (если операция - '--create'),
всеми членами архива (если задана операция чтения) или ничего не
делает (при задании всех остальных операций).
При задании имен файлов или членов, он по умолчанию берет имена
файлов с командной строки. Однако существуют другие способы задания
имен файлов или членов, или модификации, при которой tar выбирает
имена членов, которыми оперирует. Обычно эти методы работают для
задания и имен файлов, и членов архива.
5.2 Выбор файлов с определенными характеристиками
Чтобы избежать пересечения границ архива при архивировании частей
каталогового дерева, используется '--one-file-system' ('-l'). Эта
опция работает только с файлами, которые были заархивированы, потому
что находились в заархивированном каталоге. Файлы, названные на
командной строке, архивируются вне зависимости от того, где они
находятся.
Эта опция используется для выполнения полного или пошагового
резервного копирования системы файлов.
Если эта опция используется в сочетании с '--verbose' ('-v'),
выключенные файлы упоминаются на стандартной ошибке.
- 97 -
'--one-file-system'
'-l'
Предотвращает пересечение tar границ системы файлов при
архивировании. Используется в сочетании с другими операциями.
Чтобы избежать оперирования файлами, чьи имена соответствуют
шаблону, используйте опции '--exclude=шаблон' или
'--exclude-from='шаблон'.
Когда вы задаете опцию '--exclude=шаблон', tar игнорирует файлы,
соответствующие шаблону, который может быть отдельным файлом или более
сложным выражением. Таким образом, если вы вызываете tar с помощью
'tar --create --exclude=*/o', файлы, имена которых кончаются на '.o',
не включаются в архив.
FIXME: Что мы можем использовать вместо "*"?
'--exclude-from=шаблон' действует как '--exclude=шаблон', но задает
файл file, содержащий список шаблонов.
tar игнорирует файлы, чьи имена
соответствуют какому-нибудь из этих шаблонов.
Вы можете использовать опцию в одной команде более чем однажды.
'--exclude=шаблон'
Заставляет tar игнорировать файлы, соответствующие шаблону.
'--exclude-from=file'
Заставляет tar игнорировать файлы, соответствующие шаблонам,
указанным в file.
Чтобы оперировать файлами, чье время модификации или изменения
состояния - после указанной даты, используйте '--after-date=дата'. Вы
можете использовать эту опцию с '--create' или '--append', чтобы
убедиться, что архивируются только новые файлы, или с помощью
'--extract' для того, чтобы убедиться, что все недавние файлы
восстановлены.
FIXME: или -newer (дата)
- 98 -
'--newer-mtime=дата' действует как '--after-date=дата', но проверяет
только время модификации файлов, игнорируя время изменения состояния.
FIXME: Нужно привести пример на -newer-mtime с аргументом, взятым в
кавычки.
Помните, что весь аргумент должен быть взят в кавычки, если он
содержит пробел.
Заметьте: '--newer-mtime=дата' и '--after-date=дата' не используются
для пошагового резервного копирования. Некоторые файлы (например, в
переименованных каталогах) не выбираются при помощи этих опций.
FIXME: xref главу о пошаговом резервном копировании.
'--newer-mtime=дата'
Действует как '--after-date=дата', но обращает внимание
только на время модификации.
FIXME: нижеследующее нужно переписать и сделать здесь новый подраздел.
Принимаемые форматы времени (чисел),
пренебрегающие неясными конструкциями
Ввод состоит из одного или более параметров: время зона день_недели
дата год в любом порядке.
'|' и '/' значат 'или', a '[]' - 'необязательное'.
Время: Н am/pm | H:M [am/pm] пояс: название_часового_пояса |
название_часового_пояса dst день_недели | день_недели, | день_недели
число: M/D | M/D/Y | месяц D | месяц D, Y | D месяц Y год: Y
Вместо am также может быть a.m,вместо pm - p.m., пунктуация вокруг
пробелов не важна.
FIXME: месяц и день недели можно сократить.
- 99 -
5.2. 1 Чтение имен из файла *
Вместо того, чтобы давать имена файлов или членов архива на
командной строке, вы можете положить их в файл и затем использовать
опцию '--files--from=файл_по_имени'. Дайте имя файла, содержащее
список, как аргумент '--files--from=файл_по_имени'. Каждое имя файла
должно располагаться на новой строке. Если вы в качестае имени файла
даете тире, т.е. задаете '--files-from=-', то имена файлов читаются со
стандартного ввода.
Если вы хотите задать имена, которые могут содержать несколько
строк, используйте опцию '--null'. Тогда имена файлов, вместо того
чтобы начинаться каждое с новой строки, будут отделены нулями (ASCII
000). Кроме того, опция '--null' выключает опцию '--directory=каталог'.
FIXME: pxref Changing Directory
Чтение списка имен из файла *
Чтобы прочитать имена файлов не с командной строки, а из файла
системы файлов, используется опция '--files-from=файл_по__имени'. Если
вы задаете тире как файл, имена файлов читаются со стандартного ввода.
Заметьте, что при использовании и '--files-from=-', и '--file=-' в
одной команде, она не будет работать, если это не '--create' ('-c').
FIXME: xref Archive Name
для получения объяснения синтаксиса и значения регулярного выражения.
5.2.3 Оперирование только новыми файлами *
Опция '--after-date=дата' или '--newer=дата' ограничивает действие
tar только оперированием с файлами, которые были модифицированы после
указанной даты. Для получения более подробной информации о том, как
задать дату,
- 100 -
FIXME: xref Date Formats
Файл рассматривается, чтобы быть измененным, если было
модифицировано его содержимое или изменены хозяин, разрешения и т.д.
Если вы хотите только чтобы tar производил сравнение дат на
основании точного содержимого модификации файла, используйте опцию
'--newer-mtime=дата'.
Никогда не используйте эту опцию для выполнения пошаговой разгрузки.
Чтобы научиться использовать tar для осуществления резервного
копирования,
FIXME: ref Making backups
5.2.4 Пересечение границ системы файлов *
Опция '--one-file-system' заставляет tar модифицировать его обычное
поведение при архивировании содержимого каталогов. Если файл каталога
не в той системе файлов, что сам каталог, tar не архивирует этот файл
или (если он сам - каталог) все файлы, относящиеся к нему.
Это не обязательно ограничивает работу tar только архивированием
содержимого отдельной системы файлов, потому что все файлы, имена
которых даны на командной строке или в '--files-from=файлы_с_именами',
будут заархивированы.
5.3 Локальный отбор файлов *
Локальный отбор файлов
-C каталог
--directory каталог
Выполняет переход к каталогу с именем 'каталог'. Эту опцию
- 101 -
можно вставлять между файлами, с которыми tar должен
работать. Например:
tar -c iggy ziggy -C baz melvin
перемещает файлы 'iggy' и 'ziggy' из текущего каталога на
ленту. Эта опция в основном используется, когда есть
несколько отделенных друг от друга файлов, которые вы хотите
сохранить в одном каталоге архива. Здесь файл 'melvin'
записан в архиве под именем 'melvin', а не 'baz/melvin'.
Таким образом, архив будет содержать три файла, которые
появляются из одного каталога; если архив извлекается с
помощью 'tar -x', все эти файлы будут созданы в текущем
каталоге. Это отличается от команды
tar -c iggy ziggy bar/melvin
которая записывает третий файл в архив под именем
'bar/melvin', т.ч., если используется 'tar -x', третий файл
будет создан в подкаталоге 'bar'.
Предположим, что вы хотите без изменения вашего текущего
каталога вызвать tar, чтобы скинуть файлы с
'/users/ctd/dipp'. Тогда вам нужна '--directory=каталог'. Вы
можете сделать что-то вроде: tar cfC archive.tar
/users/ctd/dipp. (точка обозначает текущий каталог).
Некоторые люди хотят иметь какую-нибудь опцию для извлечения
чего-нибудь из архива в текущий каталог, игнорируя при этом
каталоговую структуру архива. Это так редко бывает нужно,
что я сомневаюсь, что такая опция действительно будет
использоваться. Она, может быть, только поощряла бы
неправильное использование tar.
Вообщем,
'--directory=каталог' можно использовать в первую очередь
для создания архивов с более ясной структурой.
-T имя_файла
--files-from=имя_файла
Принимает имена для извлечения или создания файла с именем
имя_файла. Список файлов читается не с командной строки, а с
- 102 -
файла имя_файла. Если имя_файла задано как '-', список
читается со стандартного ввода. Заметьте, что опции '-T -' и
'-f -' не работают, если вы не используете команду
'--create'. Обычно это используется, когда вы сгенерировали
список файлов для архива с помощью find.
--null
Эта опция заставляет '--files-from=файлы_с_именами' читать
имена, отделенные нулями, а не начинающиеся с новой строки.
Таким образом файлы, чьи имена содержат несколько строк,
можно заархивировать с помощью
'--files-from=файлы_с_именами'. Опция '-null' похожа на
соответствующую опцию GNU xargs и cpio и используется с
предикатом '-print0' GNU find. В tar '--null' также
заставляет рассматривать '--directory=каталог' как имена
файлов архива в случае, когда есть файлы по имени '-C'.
--exclude=файл
Выключает файл 'файл'.
-X файл
--exclude-from=файл
Выключает файлы, перечисленные в "файл".
Эта опция заставляет tar читать список регулярных выражений
(в синтаксисе оболочки), по одному на линии, из "файла", tar
игнорирует файлы, соответствующие этим регулярным
выражениям. Таким образом, если tar вызывается как 'tar -c
-X foo', и файл 'foo' содержит единственную строку '*',
файлы, чьи имена заканчиваются на '.o', не будут добавлены в
архив. Опцию '--exclude=шаблон' можно использовать
многократно.
-P
--absolute-names
Не удаляет начальное /s из имен файлов.
По умолчанию GNU tar отправляет начальное /s на ввод или
вывод. Эта опция выключает такую реакцию: это эквивалентно
изменению корневого каталога перед работой tar (кроме того,
- 103 -
убирается также обычное предупреждение).
-l
--one-file-system
При создании архива остается в системе файлов.
Эта опция предохраняет tar от пересечения границ системы
файлов при архивировании частей каталогового дерева. Эта
опция работает только с файлами, которые были
заархивированы, потому что находились в заархивированном
каталоге. Файлы, названные на командной строке, архивируются
вне зависимости от того, где они находятся.
Эта опция используется для проведения полного или
пошагового резервного копирования системы файлов, как с
помощью команды dump Unix.
Файлы, пропущенные через эту опцию, идут на стандартный вывод.
-K имя
--starting-file=имя
Начинается с файла'имя' архива.
--starting-file=имя заставляет tar начинать извлечение или
составление списка архива с файла 'имя' и рассматривать
только файлы, находящиеся после этого файла. Это
используется, если предыдущая попытка извлечь файлы
потерпела поражение, не успев дойти до файла 'имя' из-за
нехватки свободного места. (Предполагается, разумеется, что
сейчас у вас есть свободное место, или вы извлекаете уже в
другую систему файлов).
-N дата
--newer=дата
--after-date=дата
Сохраняет файлы: которые новее указанной даты.
Эта опция заставляет tar работать только с файлами, чье
время модификации или изменений позже указанной даты.
Используется в основном для создания архивов: записываются
только самые новые файлы. При извлечении тоже извлекаются
только самые новые файлы. Помните, что если аргумент даты
- 104 -
содержит хотя бы один пробел, он весь должен быть заключен в
кавычки. Синтаксический анализ даты производится с помощью
getdate.
Изменение имен членов при архивировании.
5.3.1 Переход к другому каталогу *
Опция '--directory=каталог' заставляет tar перейти из текущего
каталога в 'каталог'. В отличие от большинства опций, эта обрабатывает
все, что находится в списке для обработки. Рассмотрим следующую
команду:
tar --create --file=foo.tar -C/etc passw hosts -C /lib libc.a
Эта команда помещает файлы '/etc/passw', '/etc/hosts' и '/lib/libc.a'
в архив. Однако имена членов архива будут точно такими, какими они
были на командной строке: 'passw', 'hosts' и 'libc.a'.
Опция
'--directory=каталог' часто используется для для того, чтобы сделать
архив независимым от изначального имени каталога, содержащего файлы.
Заметьте, что опция '--directory=каталог' интерпретируется
последовательно. Если jgwbz '--directory=каталог' задает относительное
имя файла, она интерпретируется относительно текущего каталога,
который может быть тем же, что и изначальный текущий рабочий каталог,
установленный благодаря '--directory=каталог'.
При использовании '--files-from=файлы_с_именем'
FIXME: pxref Reading Names from a File
вы можете занести опцию '-C' в список файлов. К сожалению, нельзя
занести туда опции '--directory'.(В этой интерпретации нельзя
использовать опцию '--null'.)
Изменение рабочего каталога из списка имен файлов *
- 105 -
Чтобы изменить рабочий каталог в середине списка имен, заданного или
на командной строке, или в файле, при помощи
'--files-from=файлы_с_именами', используйте '--directory=каталог'. При
этом рабочий каталог изменится на каталог "каталог" после
определенного места списка. Например, в
tar --create iggy ziggy --directory=baz melvin
файлы 'iggy' и 'ziggt' перемещаются из текущего каталога в архив, за
которым следует файл 'melvin' каталога 'baz'. Эта опция особенно часто
используется, когда у вас есть несколько далеко расположенных файлов,
которые вы хотите сохранить в одном и том же каталоге архива.
Заметьте, что файл 'melvin' записан в архив под именем 'melvin', а
не 'baz/melvin'. Таким образом архив будет содержать три файла из
одного каталога; если архив извлекается с помощью 'tar --extract', все
три файла будут записаны в текущий каталог.
Это отличается от команды
tar -c iggy ziggy bar/melvin
которая записывает третий файл в архив под именем 'bar/melvin', т.ч.,
если используется 'tar -x', третий файл будет создан в подкаталоге
'bar'.
'--directory='directory'
'-C 'directory''
Изменяет рабочий каталог.
FIXME: нужно проверить, как здесь действует извлечение и привести
пример.
5.3.2 Абсолютные имена файлов *