Странную ошибку в 'tar' не включая файлы называют. __ init __. py

Делает любой знает почему tar не включает названные файлы .__init__.py (отметьте точку)?

$ mkdir /tmp/work && cd /tmp/work
$ mkdir foo
$ touch foo/.__init__.py
$ touch foo/.namespace__init__.py
$ tar czf foo.tar.gz foo

$ mkdir e && mv foo.tar.gz e/ && cd e/
$ tar zxf foo.tar.gz
$ ls -al foo/
total 0
drwxr-xr-x  2 sridharr  wheel  102 14 Mar 17:16 .
drwxr-xr-x  3 sridharr  wheel  136 14 Mar 17:17 ..
-rw-r--r--  1 sridharr  wheel    0 14 Mar 17:16 .namespace__init__.py
$ 

$ echo ".__init__.py file is missing. WTF? This is OSX 10.6"

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

Обновление 2: Я не могу воспроизвести это на Linux.

3
задан 27.05.2010, 03:25

3 ответа

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

6
ответ дан 07.12.2019, 22:54

Я не могу копировать это на хосте Debian 5.0. Возможно, существует ошибка в версии tar, установленного в системе, которую Вы используете? Какая версия *отклоняют Вас, используют?

$ mkdir foo
$ touch foo/.namespace__init__.py
$ touch foo/.__init__.py
$ tar -czvf foo.tar.gz foo/
foo/
foo/.namespace__init__.py
foo/.__init__.py

$ # example the file
$ tar -tzvf foo.tar.gz
drwxr-xr-x cfrancy/cfrancy   0 2010-03-14 17:34 foo/
-rw-r--r-- cfrancy/cfrancy   0 2010-03-14 17:34 foo/.namespace__init__.py
-rw-r--r-- cfrancy/cfrancy   0 2010-03-14 17:34 foo/.__init__.py
1
ответ дан 07.12.2019, 22:54

Существуют некоторые недокументированные (?) переменные среды, которые могут использоваться для отключения специальной обработки расширенных атрибутов и/или ветвей ресурсов в tarмир, если это имеет значение). rsync имеет -E/--extended-attributes опция включить (!) эту обработку — но на некоторой не-Apple rsyncs -E средства --executability вместо этого.

На Mac OS X 10.4 (первый выпуск, который создал их AppleDouble-закодированные ._* заархивируйте участников), переменная среды COPY_EXTENDED_ATTRIBUTES_DISABLE. В Leopard и Snow Leopard, переменная COPYFILE_DISABLE. Обычно переменные просто должны быть установлены. Любое значение сделает (даже пустая строка), но true кажется, является традиционным. Таким образом:

COPY_EXTENDED_ATTRIBUTES_DISABLE=true COPYFILE_DISABLE=true tar …

Установка этой переменной имеет следующие эффекты:

  • При создании/обновлении архивов:
    • Предотвращает создание ._* заархивируйте участников при архивации файлов с расширенными атрибутами.
    • Позволяет создание ._* заархивируйте участников при архивации фактический ._* файлы.
  • При извлечении архивов:
    • Причины ._* заархивируйте участников, чтобы быть извлеченными как простые файлы вместо того, чтобы восстановить расширенные атрибуты в связанный файл.

Короче говоря, установка этих переменных делает tar, и др. действуйте как, они были бы на (например). Linux.

Если Вам редко нужно к архивным файлам, которые расширили атрибуты или ветви ресурсов, и Вы, возможно, должны были бы заархивировать или извлечь фактический ._* файлы, затем Вы могли бы рассмотреть установку и экспорт этих переменных в одном из Ваших файлов инициализации оболочки:

# Tell tar, pax, etc. on Mac OS X 10.4+ not to archive
# extended attributes (e.g. resource forks) to ._* archive members.
# Also allows archiving and extracting actual ._* files.
COPY_EXTENDED_ATTRIBUTES_DISABLE=true COPYFILE_DISABLE=true
export COPY_EXTENDED_ATTRIBUTES_DISABLE COPYFILE_DISABLE

Они ._* файлы также используются для хранения расширенных атрибутов в файловых системах, которые не поддерживают их — обычно варианты FAT. Эти переменные действительно не помогут при контакте с ._* файлы в других файловых системах, просто архивы.

HFS + файловая система, используемая в Mac OS X, совершенно способен к хранению фактического ._* к файлам, поэтому после того как Вы используете переменные для извлечения файлов к файловой системе, файлы, можно получить доступ правильно всеми нормальными способами.

6
ответ дан 07.12.2019, 22:54

Теги

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