40

Возможный дубликат:
Почему я получаю файлы типа ._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. Но я не хочу их - они просто мусор для меня. Есть ли способ подавить их?

3 ответа3

65

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

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

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

Значение, которое вы используете для переменной среды, не имеет значения (это может быть даже пустая строка). Значения, такие как 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, которая работает таким же образом.

0

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

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

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

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .