Faça com que o mac tar pare de colocar ._ * nomes de arquivos nos arquivos tar [duplicado]


46

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

Eu crio scripts de autoconf em um Mac. Quando o tar é executado, coloca todos esses nomes ._ foobar 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 nos nomes ._ foobar, para que possam ser restauradas em outro sistema Mac. Mas eu não os quero - eles são apenas lixo para mim. Existe alguma maneira de suprimi-los?



2
@geekosaur O usuário do unix.SE desistiu e aceitou uma resposta errada.
Daniel Beck

Há também uma pergunta relacionada à pergunta SU sobre a extração correta de ._*arquivos de arquivos (por exemplo .__init__.py) que usa a mesma solução.
precisa

Respostas:


69

Por uma resposta a outra pergunta , você pode definir a variável de ambiente não documentada (?) COPYFILE_DISABLE para impedir que vários programas fornecidos pelo sistema (incluindo tar ) atribuam um significado especial aos ._*membros do arquivo. Em particular, impedirá que eles:

  • armazenar dados de atributos estendidos (incluindo bifurcações de recursos) nos ._*membros do arquivo
    (por exemplo, não "polui" os arquivos criados no Mac OS X, mas destinados ao uso em outros sistemas), e

  • tentar extrair atributos ou recursos estendidos de membros do arquivo nomeados como ._*
    (isto é, não interpretar mal ._*membros do arquivo em arquivos de outros sistemas).

O valor que você usa para a variável de ambiente não é importante (pode até ser a sequência vazia). Valores como 0e falsenão reativarão o recurso. A única coisa que importa é se a variável está definida (é necessário "desmarcá-la" para reativar o recurso).

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

COPYFILE_DISABLE=1 tar cf new.tar …

Se você se deparar com 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 necessário, você pode desabilitar a variável para comandos individuais.

(unset COPYFILE_DISABLE; tar cf somefile.tar …)

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

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

COPYFILE_DISABLE originou no Mac OS X 10.5. Se você precisar oferecer suporte ao 10.4, ele possui COPY_EXTENDED_ATTRIBUTES_DISABLE que funciona da mesma maneira.


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

0

Não é um especialista, mas pesquisou um pouco no Google: http://www.ofzenandcomputing.com/zanswers/3422

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

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

editar: eu deveria ter mencionado isso pode ter resultados ruins, use por sua conta e risco.


11
O script remove os garfos de recursos dos arquivos no disco local. Eles geralmente servem a um propósito (como alterar o aplicativo associado de um determinado arquivo), portanto, isso deve vir com um grande aviso.
Daniel Beck

O script não me ajuda. Ele 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, diferentemente dos arquivos zip, você não pode simplesmente remover arquivos de um arquivo tar.
vy32

(bah, timeouts) Na verdade, você pode usar praticamente qualquer um, tarexceto o libarchivebaseado no BSD (isso inclui o Mac OS X), mas pode não ser confiável; instalar o GNU tar geralmente é uma boa idéia. (No entanto, é doloroso. Acho que você precisa listar todos eles e passar esses nomes na linha de comando.) Além disso, os garfos de recursos tecnicamente estão no disco, mas no HFS + eles são armazenados em atributos estendidos; os ._arquivos são a maneira do OS X de armazenar garfos de recursos em locais que não suportam atributos estendidos.
Geekosaur 20/03

0

Você pode tentar compilar por conta própria 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 pular a criação desses arquivos.


Eu apreciaria uma explicação para o voto negativo. Obrigado.
Daniel Beck
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.