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

38

Eu crio scripts autoconf em um Mac. Quando o tar é executado, ele 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 eles 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?

    
por vy32 19.03.2011 / 20:21

3 respostas

62

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

  • armazenando dados de atributos estendidos (incluindo forquilhas 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 repositório nomeados como ._*
    (isto é, não interprete erroneamente ._* 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 string vazia). Valores como 0 e false não reativarão o recurso. A única coisa que importa é saber se a variável está definida (você tem que "desarmar" para reabilitar o recurso).

Você pode usar essa variável em comandos individuais, aproveitando a capacidade de shells ao estilo Bourne ( sh , ksh , bash , 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 do que o contrário, 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, poderá cancelar a configuração da 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.

    
por 21.03.2011 / 10:52
0

Não é um especialista, mas um pouco de googling descobriu isso: link

e isso: link

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

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

    
por 19.03.2011 / 20:32
0

Você pode tentar compilar seu próprio tar ou 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.

    
por 21.03.2011 / 06:49