Encontrou a solução. Nos sistemas Apple, os arquivos que começam com ._
contêm conjunto de recursos de outro arquivo. Eles não são arquivos normais que podem ser copiados e movidos.
Alguém sabe por que tar
não está incluindo arquivos nomeados .__init__.py
(observe o ponto)?
$ 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"
Atualizar : o tar parece estar ignorando arquivos que começam com ._
caracteres; por quê?
Atualização 2 : não consigo reproduzir isso no Linux.
Encontrou a solução. Nos sistemas Apple, os arquivos que começam com ._
contêm conjunto de recursos de outro arquivo. Eles não são arquivos normais que podem ser copiados e movidos.
Existem algumas variáveis de ambiente não documentadas (?) que podem ser usadas para desativar o tratamento especial de atributos estendidos e / ou forks de recursos em tar (e pax , por o que vale a pena). rsync tem a opção -E
/ --extended-attributes
para habilitar (! ) este tratamento - mas em alguns não-Apple rsync s -E
significa --executability
.
No Mac OS X 10.4 (a primeira versão que criou esses membros do arquivo ._*
do AppleDouble), a variável de ambiente é COPY_EXTENDED_ATTRIBUTES_DISABLE
. No Leopard e no Snow Leopard, a variável é COPYFILE_DISABLE
. Normalmente, as variáveis precisam ser configuradas. Qualquer valor serve (até a string vazia), mas true
parece ser tradicional. Assim:
COPY_EXTENDED_ATTRIBUTES_DISABLE=true COPYFILE_DISABLE=true tar …
Definir esta variável tem os seguintes efeitos:
._*
membros do arquivo ao arquivar arquivos com atributos estendidos. ._*
membros do arquivo ao arquivar arquivos ._*
reais. ._*
membros do archive sejam extraídos como arquivos simples, em vez de restaurar os atributos estendidos para o arquivo relacionado. Em suma, definir essas variáveis torna tar , et al. agir como se estivessem em (por exemplo) Linux.
Se você raramente precisar arquivar arquivos que tenham atributos estendidos ou forks de recursos, e talvez seja necessário arquivar ou extrair os arquivos ._*
reais, convém configurar e exportar essas variáveis em um dos arquivos de inicialização do shell:
# 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
Esses arquivos ._*
também são usados para armazenar atributos estendidos em sistemas de arquivos que não os suportam - mais comumente as variantes do FAT. Essas variáveis não ajudarão muito quando estiver lidando com ._*
arquivos em outros sistemas de arquivos, apenas arquivos.
O sistema de arquivos HFS + usado no Mac OS X é perfeitamente capaz de armazenar arquivos ._*
reais, então quando você usa as variáveis para extrair os arquivos para o sistema de arquivos, os arquivos podem ser acessados corretamente de todas as formas normais. p>
Eu não posso replicar isso em um host Debian 5.0. Talvez haja um bug na versão do tar instalado no sistema que você está usando? Qual versão do * nix você está usando?
$ 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