Почему я получаю файлы типа ._foo в моем архиве на OS X?

23950
Jesse Beder

Когда я tar некоторые файлы в OS X:

tar cvf foo.tar foo 

Он создает дополнительный файл ._fooв tarball:

./._foo foo 

который появляется только в том случае, если я извлекаю его не в операционной системе Mac. Но ._fooне существует в моей файловой системе! В чем дело? Как я могу избавиться от этого?

61
Ненавижу это. Выглядит некрасиво, когда я просматриваю архивы с 7-Zip. Nathaniel 15 лет назад 0

5 ответов на вопрос

73
Jesse Beder

Tar OS X использует формат AppleDouble для хранения расширенных атрибутов и ACL.

$ touch file1 file2 file3 $ xattr -w key value file1 $ chmod +a 'admin allow delete' file2 $ ls -le@ * -rw-r--r--@ 1 lauri staff 0 May 25 07:09 file1 key 5 -rw-r--r--+ 1 lauri staff 0 May 25 07:09 file2 0: group:admin allow delete -rw-r--r-- 1 lauri staff 0 May 25 07:09 file3 $ tar -cf 1.tar * $ tar -tf 1.tar ./._file1 file1 ./._file2 file2 file3 

Tar OS X также знает, как преобразовать элементы ._ обратно в собственные форматы, но файлы ._ обычно сохраняются при извлечении архивов на других платформах. Вы можете указать tar не включать метаданные, установив для COPYFILE_DISABLE значение:

$ COPYFILE_DISABLE=1 tar -cf 2.tar file*  $ tar -tf 2.tar file1 file2 file3 
  • Функции copyfile описаны в man copyfile
  • ls -l@показывает ключи и размеры расширенных атрибутов, ls -leпечатает ACL
  • xattr -l перечисляет ключи и значения расширенных атрибутов
  • xattr -c очищает все расширенные атрибуты (-d нельзя использовать отдельно)
  • chmod -N удаляет ACL
  • Zip-файлы, созданные в OS X, используют папку __MACOSX для хранения похожих метаданных

Информация хранится в виде расширенных атрибутов:

  • Разветвления ресурсов (разветвления ресурсов были расширены с 10.4)
    • Пользовательские иконки, установленные в Finder, и изображения файлов Icon
    • Метаданные в PSD файлах
    • Объекты, хранящиеся в файлах scpt, состояние окна редактора AppleScript, описания сценариев
  • Информация о псевдонимах (псевдонимы перестают работать, если удалены расширенные атрибуты)
  • Статус карантина или исходные URL-адреса файлов, загруженных из Интернета
  • Прожектор комментирует
  • Кодирование файлов, сохраненных с помощью TextEdit
  • Положение каретки файлов, открытых с помощью TextMate
  • Обезжиренные заметки
У меня GNU tar 1.15.1 по умолчанию на MacOS X 10.5.8 (Leopard). Последняя версия GNU - 1.22 (март 2009 г.). Скачано и собрано: у него нет '--no-xattrs' при сборке в MacOS X. Jonathan Leffler 15 лет назад 0
Вместо экспорта этой переменной во всю систему вы также можете использовать `env COPYFILE_DISABLE tar -cf archive.tar my_folder /`. Georg Schölly 14 лет назад 1
Другой вариант - позволить им быть. Это маленький размер шрифта и информация, которую вы выбрасываете. Это также раздражает только тех, кто хочет их видеть, а не узнает, что они имеют в виду. Они не похожи на чертовы эскизы (которые занимают много места) или [дерьмо Finder's DS] (http://en.wikipedia.org/wiki/.DS_Store) (это хорошо только для поиска), и если они существуют, обычно потому, что они иметь соответствующие данные. cregox 13 лет назад 0
@Cawas, проблема была в том, что они появились в тарболе, который я тогда распространял кроссплатформенным, и они не имеют никакого значения для операционной системы не Apple. Jesse Beder 13 лет назад 1
Это правда, Джесси, они действительно не имеют никакого значения для других ОС / файловых систем *. Но * информация есть *, и мы можем `cat` или` type`, чтобы посмотреть, что внутри, по крайней мере. И это обычно что-то простой текст, который был введен вручную. Я бы не выбрасывал это для резервного копирования, но это может быть мусором, если вы хотите распространять что-то кроссплатформенное и особенно если это происходит по ошибке. Просто сказать, что возможность оставить их, вполне допустимо. cregox 13 лет назад 1
К вашему сведению, экспортная линия для Leopard также работает для Lion. jjeaton 12 лет назад 1
11
mdm

Начиная с bsdtar 3.0.3 - libarchive 3.0.3(и, возможно, ранее) bsdtarкоманды, вызываемой --disable-copyfileдля подавления создания ._файлов, появилась новая опция .

# on Mac OS X # /usr/bin/tar -> bsdtar ls -l /usr/bin/tar   # from man bsdtar --disable-copyfile Mac OS X specific. Disable the use of copyfile(3). 
С `bsdtar 2.8.3 - libarchive 2.8.3` из` 10.7.5` `--disable-copyfile` не документирован, но тем не менее доступен. Stefan Schmidt 11 лет назад 3
https://github.com/libarchive/libarchive/commit/7cf625f3e1ff2f376d265465f8f97dd5b8953ef2#commitcomment-9636090 и http://forums.macrumors.com/showthread.php?p=20684196#post20684196 привлекли внимание документации для Apple. Graham Perrin 9 лет назад 0
1
jtbandes

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

export COPYFILE_DISABLE=true tar cvf foo.tar foo 

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

Спасибо! Смотрите конец моего ответа выше для этого решения. Jesse Beder 14 лет назад 0
dot_clean не работает для этого, так как tar создает файлы joedevon 14 лет назад 0
0
Aivar

Вот скрипт Python для удаления этих файлов. Должно работать в любой популярной ОС.

Не тщательно протестированы, используйте на свой страх и риск!

import os import os.path  def dot_clean(folder): files = os.listdir(folder) for file in files: full_name = folder + "/" + file if os.path.isdir(full_name): dot_clean(full_name) elif file.startswith("._"): os.remove(full_name)  dot_clean('.')  
Ну, кроме OS X с HFS + ... Daniel Beck 12 лет назад 1
Почему бы и нет? Можете ли вы предложить, как исправить? Aivar 12 лет назад 0
Эти файлы на самом деле не существуют в HFS +, поскольку файловая система может хранить метаданные внутри себя. Эти файлы - обходной путь для файловых систем, которые не поддерживают это, например, когда вы переносите файлы с HFS + на флэш-накопитель USB FAT, они появляются, а когда вы переносите их обратно, они исчезают. Daniel Beck 12 лет назад 1
-3
dbmikus

Символ точки, ".", Используется на платформе Mac в качестве индикатора скрытого файла. В Windows это символ «$». В любом случае, файл ._foo, вероятно, содержит некоторую информацию, специфичную для OS X, и я бы рекомендовал не удалять ее. В других системах вам придется игнорировать это, иначе кто-то из вас может предоставить вам скрипт, который будет скрывать файлы и папки, начинающиеся с «.».

Это все метаданные, в основном такие вещи, как пользовательские значки, приложение, создавшее файл и т. Д. Можно безопасно удалить. dreamlax 15 лет назад 0
Тем не менее, если вы в первую очередь используете Mac, я бы порекомендовал сохранить его. Если вы используете Windows больше, чем OS X, тогда убивайте ее. dbmikus 15 лет назад 0
(@dreamlax) Это правда, что большая часть данных, хранящихся в расширенных атрибутах, представляет собой метаданные, которые можно безопасно удалить, но это не всегда так. В частности, когда файлы с «ветвями ресурсов» хранятся в чем-то, что не является производным от HFS (FAT, UFS, tar и т. Д.), Эти файлы ._ * используются для хранения данных (среди других расширенных атрибутов) ресурс вилки. Хотя многие форматы файлов уходят от использования ресурсов ресурсов (в сторону пакетов), в некоторых файлах критические данные хранятся в ветке ресурсов (иногда данные ресурсов являются единственными данными). Chris Johnsen 15 лет назад 0