Получить Mac tar, чтобы перестать помещать ._ * имена файлов в архивах tar [дубликаты]

46

Возможное дублирование:
почему я получаю файлы типа ._foo в моем архиве на OS X?

Я создаю сценарии autoconf на Mac. Когда tar запускается, он помещает все эти имена ._ foobar в архив:

libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpr
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpr

Теперь происходит то, что файловая система Apple HFS помещает свойства файла в имена ._ foobar, чтобы их можно было восстановить в другой системе Mac. Но я не хочу их - они просто мусор для меня. Есть ли способ подавить их?

vy32
источник
Дубликат unix.stackexchange.com/questions/9665/… .
geekosaur
2
@geekosaur Пользователь unix.SE сдался и принял неправильный ответ.
Даниэль Бек
Существует также связанный вопрос SU о правильном извлечении ._*файлов из архивов (например .__init__.py), который использует то же решение.
Крис Джонсен

Ответы:

69

Для ответа на другой вопрос вы можете установить недокументированную (?) Переменную среды COPYFILE_DISABLE, чтобы некоторые из поставляемых системой программ (включая tar ) не придавали особого значения ._*членам архива. В частности, это помешает им:

  • хранить расширенные данные атрибутов (включая ветки ресурсов) в ._*элементах архива
    (т.е. не «загрязнять» архивы, созданные в Mac OS X, но предназначенные для использования в других системах), и

  • попытка извлечь расширенные атрибуты или ресурсы из элементов архива, названных как ._*
    (то есть не интерпретировать ._*элементы архива в архивах из других систем).

Значение, которое вы используете для переменной среды, не имеет значения (это может быть даже пустая строка). Значения, как 0, и falseне будет повторно включить функцию. Единственное, что имеет значение, это то, установлена ​​ли переменная (вы должны «сбросить» ее, чтобы снова включить функцию).

Вы можете использовать эту переменную в отдельных командах, используя возможности оболочек в стиле Борна ( sh , ksh , bash , zsh и т. Д.) Для добавления префиксов к командам с дополнительными переменными среды.

COPYFILE_DISABLE=1 tar cf new.tar …

Если вы сталкиваетесь с проблемой чаще, чем нет, то вы можете установить и экспортировать эту переменную в один из файлов инициализации вашей оболочки.

# turn off special handling of ._* files in tar, etc.
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

Когда вам нужно, вы можете сбросить переменную для отдельных команд.

(unset COPYFILE_DISABLE; tar cf somefile.tar …)

В этой системе Mac OS X 10.6 следующие команды, кажется, знают о COPYFILE_DISABLE:

  • /usr/bin/tar(символическая ссылка на bsdtar)
  • /usr/bin/bsdtar
  • /usr/bin/gnutar
  • /bin/pax

COPYFILE_DISABLE возникла в Mac OS X 10.5. Если вам нужна поддержка 10.4, у нее есть COPY_EXTENDED_ATTRIBUTES_DISABLE, которая работает таким же образом.

Крис Джонсен
источник
ВАУ. Как раз то, что я искал. Спасибо. Мои файлы autoconf будут намного, намного чище.
vy32
0

Не эксперт, но немного погуглил нашел это: http://www.ofzenandcomputing.com/zanswers/3422

и это: http://hintsforums.macworld.com/archive/index.php/t-28703.html

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

редактировать: я должен был упомянуть, это может иметь плохие результаты, используйте на свой страх и риск.

CreeDorofl
источник
1
Скрипт удаляет ветки ресурсов из файлов на локальном диске. Обычно они служат цели (например, изменяют приложение, связанное с определенным файлом), поэтому это должно сопровождаться большим предупреждением.
Даниэль Бек
Сценарий мне не помогает. Он удаляет файлы с диска, а не из архива tar. Оказывается, у меня нет файлов ресурсов на моем диске. Но они помещаются в архив. И в отличие от zip-файлов, вы не можете просто удалить файлы из архива tar.
vy32
(ба, тайм-ауты) На самом деле, вы можете, если используете почти все, tarкроме BSD (на libarchiveоснове Mac OS X), но вполне могут быть ненадежными; установка GNU tar часто является хорошей идеей. (Это, однако, больно. Я думаю, что вам нужно перечислить все из них и затем передать эти имена в командной строке.) Кроме того, вилки ресурсов технически находятся на диске, но в HFS + они хранятся в расширенных атрибутах; эти ._файлы являются способом OS Х хранения вилок ресурсов в местах , которые не поддерживают расширенные атрибуты.
geekosaur
0

Вы можете попробовать скомпилировать свой собственный tarили установить его из Macports или Fink, если он доступен (у Homebrew его нет). С некоторой «удачей» он должен не знать метаданные OS X и пропустить создание этих файлов.

Даниэль Бек
источник
Я был бы признателен за объяснение понижения. Спасибо.
Даниэль Бек