Делает любой знает почему 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.
Найденный решением. В системах Apple, файлы, запускающиеся с ._
содержит ветвь ресурсов другого файла. Они не нормальные файлы, которые могут быть скопированы и перемещены.
Я не могу копировать это на хосте 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
Существуют некоторые недокументированные (?) переменные среды, которые могут использоваться для отключения специальной обработки расширенных атрибутов и/или ветвей ресурсов в 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, совершенно способен к хранению фактического ._*
к файлам, поэтому после того как Вы используете переменные для извлечения файлов к файловой системе, файлы, можно получить доступ правильно всеми нормальными способами.