Questão Obtenha o mac tar para parar de colocar nomes de arquivos ._ * em arquivos tar [duplicados]


Duplicar Possível:
Por que recebo arquivos como ._foo no meu tarball no OS X? 

Eu crio scripts autoconf em um Mac. Quando o tar é executado, ele coloca tudo isso.foobar nomes no arquivo:

libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpr
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpr

Agora, o que está acontecendo é que o sistema de arquivos HFS da Apple está colocando as propriedades do arquivo no.foobar nomes para que possam ser restaurados em outro sistema Mac. Mas eu não quero eles - eles são apenas lixo para mim. Existe alguma maneira de suprimi-los?


38


origem


Duplicado de unix.stackexchange.com/questions/9665/…. - geekosaur
@geekosaur O usuário do unix.SE desistiu e aceitou uma resposta errada. - Daniel Beck♦
Há também uma questão relacionada com a pergunta sobre extraindo corretamente ._* arquivos de arquivos (por exemplo, arquivos .__init__.py) que usa a mesma solução. - Chris Johnsen


Respostas:


Por uma resposta para outra pergunta, você pode definir a variável de ambiente não documentada (?) COPYFILE_DISABLE para evitar vários dos programas fornecidos pelo sistema alcatrão) de dar significado especial a ._* membros do arquivo. Em particular, irá impedi-los de:

  • armazenar dados de atributos estendidos (incluindo forks de recursos) em ._* membros do arquivo
    (isto é, não "polua" arquivos criados no Mac OS X, mas destinados a uso em outros sistemas), e

  • tentando extrair atributos estendidos ou recursos de membros do arquivo nomeados como ._*
    (isto é, não interprete erroneamente ._* arquivar membros em arquivos de outros sistemas).

O valor que você usa para a variável de ambiente não é importante (pode até ser a string vazia). Valores como 0e false não reativará o recurso. A única coisa que importa é se a variável está configurada (você tem que "desarmar" para reabilitar o recurso).

Você pode usar essa variável em comandos individuais, aproveitando a capacidade de shells estilo Bourne (sh, ksh, festança, zsh, etc.) para prefixar comandos com variáveis ​​de ambiente extras.

COPYFILE_DISABLE=1 tar cf new.tar …

Se você encontrar o problema com mais frequência, convém definir e exportar essa variável em um dos arquivos de inicialização do seu shell.

# turn off special handling of ._* files in tar, etc.
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

Quando você precisar, você poderá desconfigurar a variável para comandos individuais.

(unset COPYFILE_DISABLE; tar cf somefile.tar …)

Neste sistema Mac OS X 10.6, todos os comandos a seguir parecem saber sobre COPYFILE_DISABLE:

  • /usr/bin/tar (um link simbólico para bsdtar)
  • /usr/bin/bsdtar
  • /usr/bin/gnutar
  • /bin/pax

COPYFILE_DISABLE foi originado no Mac OS X 10.5. Se você precisa dar suporte a 10.4, ele tem COPY_EXTENDED_ATTRIBUTES_DISABLE que funciona da mesma maneira.


60



UAU. É mesmo o que eu procurava. Obrigado. Meus arquivos autoconf serão muito, muito mais limpos. - vy32


Não é um especialista, mas um pouco de googling descobriu isso: http://www.ofzenandcomputing.com/zanswers/3422

e isto: http://hintsforums.macworld.com/archive/index.php/t-28703.html

O segundo comando parece que ele pode ser incorporado em um script ... talvez você não consiga impedir a criação de arquivos de bifurcação de recursos, mas pode excluí-los automaticamente posteriormente.

edit: eu deveria ter mencionado isso pode ter resultados ruins, use a seu próprio risco.


0



O script remove as garras de recurso dos arquivos no disco local. Eles geralmente servem a um propósito (como alterar a aplicação associada a um determinado arquivo), então isso deve vir com um grande aviso. - Daniel Beck♦
O roteiro não me ajuda. Remove os arquivos do disco, não do arquivo tar. Acontece que eu não tenho os arquivos de recursos no meu disco. Mas eles estão sendo colocados no arquivo. E, ao contrário dos arquivos zip, você não pode simplesmente remover arquivos de um arquivo tar. - vy32
(bah, timeouts) Na verdade, você pode se usar praticamente qualquer tar mas o BSD libarchivebaseado em um (isso inclui o Mac OS X), mas pode não ser confiável; A instalação do GNU tar é geralmente uma boa idéia. (É, no entanto, doloroso. Eu acho que você precisa listar todos eles e então passar esses nomes na linha de comando.) Além disso, os recursos tecnicamente estão no disco, mas no HFS + eles são armazenados em atributos estendidos; a ._ Os arquivos são a maneira do OS X de armazenar forquilhas de recursos em locais que não suportam atributos estendidos. - geekosaur


Você pode tentar compilar seu próprio tarou instalá-lo no Macports ou no Fink, se disponível (o Homebrew não o possui). Com alguma "sorte", ele deve ignorar os metadados do OS X e ignorar a criação desses arquivos.


0



Eu apreciaria uma explicação para o downvote. Obrigado. - Daniel Beck♦