Я хочу создать tar-архив определенного каталога (с его подкаталогами, конечно). Но когда я делаю это, используя команду tar, я получаю список файлов, которые были включены, например:
календарь_финал /._ style.css
calendar_final / style.css
Как видите, есть две версии одного и того же файла. Это касается каждого файла, а их много. Как исключить временные файлы с префиксом ._ из архива tar?
Ответы:
Вы опубликовали в комментарии, что вы работаете в системе Mac OS X. Это важный ключ к цели этих
._*
файлов.Эти
._*
записи архива являются порциями данных AppleDouble, которые содержат дополнительную информацию, связанную с соответствующим файлом (который без._
префикса). Они генерируются специфичным для Mac OS X копируемым файлом (3) . В двоичных объектах AppleDouble хранятся данные контроля доступа (ACL) и расширенные атрибуты (обычно это флаги Finder и «ветки ресурсов», но xattrs можно использовать для хранения любых данных).Системные инструменты архивирования Mac OS X (
bsdtar
также обозначенные какtar
)gnutar
, иpax
) сгенерируют элемент._*
архива для любого файла, с которым связана любая расширенная информация; в «разархивированном» режиме они также будут декодировать эти элементы архива и применять полученную расширенную информацию к связанному файлу. Это создает архив «полной точности» для использования в системах Mac OS X путем сохранения и последующего извлечения всей информации, которую может хранить файловая система HFS +.Соответствующие инструменты архивирования в других системах не знают, как обрабатывать эти
._*
файлы, поэтому они распаковываются как обычные файлы. Поскольку такие файлы довольно бесполезны в других системах, они часто рассматриваются как «ненужные файлы». Соответственно, если система, не относящаяся к Mac OS X, генерирует архив, включающий обычные файлы, которые начинаются с._
, инструменты разархивирования Mac OS X будут пытаться декодировать эти файлы как расширенную информацию.Однако существует недокументированный (?) Способ заставить поставляемые системой архиваторы Mac OS X вести себя так же, как в других системах Unixy: переменная среды COPYFILE_DISABLE. Установка этой переменной (любое значение, даже пустая строка) не позволит архиваторам создавать
._*
элементы архива для представления любой расширенной информации, связанной с архивированными файлами. Его присутствие также не позволит архиваторам пытаться интерпретировать таких участников архива как расширенную информацию.Вы можете установить эту переменную в файле инициализации вашей оболочки, если хотите работать чаще, чем нет.
Затем, когда вам нужно повторно включить функцию (чтобы сохранить / восстановить расширенную информацию), вы можете «сбросить» переменную для отдельных команд:
Архиваторы в Mac OS X 10.4 также делают нечто подобное, хотя они используют другую переменную среды: COPY_EXTENDED_ATTRIBUTES_DISABLE
источник
Это должно работать:
источник
tar --version
дает GNU 1.23 здесь.tar vzcf ...
чтобы увидеть, если какие-либо неправильные файлы были включены.Фредерик Дьюердт дал решение, которое работает на GNU tar (используется в Linux, Cygwin, FreeBSD, OSX, возможно, других), но не на других системах, таких как NetBSD, OpenBSD или Solaris.
POSIX не определяет
tar
команду (потому что она слишком сильно различается в разных вариантах Unix) и вводитpax
команду вместо этого. Опция-w
означает создание архива (-r
извлечения) и-x
выбор формата архива. Опция-s '!BRE!!'
исключает все файлы, путь которых соответствует базовому регулярному выражению BRE.источник
Начиная с
bsdtar 3.0.3 - libarchive 3.0.3
(и, возможно, ранее), есть новая (специфичная для Mac OS X) опция дляbsdtar
команды, вызываемой--disable-copyfile
для подавления создания._
файлов. Старые версииtar
не имеют--disable-copyfile
опции, но установка переменной средыCOPYFILE_DISABLE=1
должна работать.источник
bsdtar 2.8.3 - libarchive 2.8.3
из не документирована , но тем не менее доступны.10.7.5
--disable-copyfile
Следуй этим шагам:
Найдите все
._
файлы и перечислите их, используя,-ls
чтобы вы могли видеть все._
файлы и, наконец, удалить их.Создать архив .tar используя.
источник