Почему я получаю файлы как. _foo в моем tarball на OS X?

Когда я смолю определенные файлы в OS X:

tar cvf foo.tar foo

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

./._foo
foo

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

70
задан 04.11.2014, 16:51

3 ответа

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

$ 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 печать ACLs
  • xattr -l перечисляет ключи и значения расширенных атрибутов
  • xattr -c очищается все расширенные атрибуты (-d не может использоваться один),
  • chmod -N удаляет ACLs
  • Zip-файлы, созданные на OS X, используют __ папка MACOSX для хранения подобных метаданных

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

  • Ветви ресурсов (ветви ресурсов были расширены атрибуты с тех пор 10.4),
    • Пользовательский набор значков в Средстве поиска и изображениях файлов Icon\r
    • Метаданные в файлах PSD
    • Объекты хранятся в scpt файлах, Редактор AppleScript статус окна, описания сценариев
  • Информация о псевдонимах (псевдонимы прекращают работать, если расширенные атрибуты удалены),
  • Карантинное состояние или исходные URL файлов загружаются с Интернета
  • Комментарии центра внимания
  • Кодирование файлов сохраняется с TextEdit
  • Позиция курсора файлов открыта с TextMate
  • Просмотрите примечания
79
ответ дан 07.12.2019, 08:11

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

export COPYFILE_DISABLE=true
tar cvf foo.tar foo

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

1
ответ дан 07.12.2019, 08:11

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

-3
ответ дан 07.12.2019, 08:11

Теги

Похожие вопросы