Estou querendo criar um arquivo tar de um diretório específico (com seus subdiretórios, é claro). Mas quando faço isso, usando o comando tar, recebo uma lista de arquivos que foram incluídos, por exemplo:
um calendário_final /._ style.css
uma calendar_final / style.css
Como você pode ver, existem duas versões do mesmo arquivo. Isso vale para todos os arquivos e existem muitos. Como excluo os arquivos temporários, com o prefixo ._, do arquivo tar?
Respostas:
Você postou em um comentário que está trabalhando em um sistema Mac OS X. Essa é uma pista importante para o objetivo desses
._*
arquivos.Essas
._*
entradas de arquivamento são blocos de dados AppleDouble que contêm as informações extras associadas ao arquivo correspondente (aquele sem o._
prefixo). Eles são gerados pela família de funções copyfile (3) específica do Mac OS X. Os blobs AppleDouble armazenam dados de controle de acesso (ACLs) e atributos estendidos (geralmente, sinalizadores do Finder e "garfos de recursos", mas o xattrs pode ser usado para armazenar qualquer tipo de dados).As ferramentas de arquivamento do Mac OS X fornecidas pelo sistema (
bsdtar
(também vinculadas comotar
),gnutar
epax
) gerarão um._*
membro de arquivamento para qualquer arquivo que possua informações estendidas associadas; no modo "desarquivador", eles também decodificarão esses membros do arquivo e aplicarão as informações estendidas resultantes ao arquivo associado. Isso cria um arquivo de "fidelidade total" para uso em sistemas Mac OS X preservando e depois extraindo todas as informações que o sistema de arquivos HFS + pode armazenar.As ferramentas de arquivamento correspondentes em outros sistemas não sabem dar tratamento especial a esses
._*
arquivos; portanto, elas são descompactadas como arquivos normais. Como esses arquivos são bastante inúteis em outros sistemas, eles geralmente são vistos como "arquivos indesejados". Da mesma forma, se um sistema não Mac OS X gerar um arquivo que inclua arquivos normais que começam com._
, as ferramentas de desarquivamento do Mac OS X tentarão decodificar esses arquivos como informações estendidas.No entanto, existe uma maneira não documentada (?) De fazer com que os arquivadores do Mac OS X fornecidos pelo sistema se comportem como em outros sistemas Unixy: a variável de ambiente COPYFILE_DISABLE. A configuração dessa variável (com qualquer valor, mesmo a cadeia vazia) impedirá que os arquivadores gerem
._*
membros do arquivo para representar qualquer informação estendida associada aos arquivos arquivados. Sua presença também impedirá que os arquivadores tentem interpretar esses membros do arquivo como informações estendidas.Você pode definir essa variável no arquivo de inicialização do seu shell se desejar trabalhar dessa maneira com mais frequência.
Então, quando precisar reativar o recurso (para preservar / restaurar as informações estendidas), você pode "desmarcar" a variável para comandos individuais:
Os arquivadores no Mac OS X 10.4 também fazem algo semelhante, embora usem uma variável de ambiente diferente: COPY_EXTENDED_ATTRIBUTES_DISABLE
fonte
Isso deve funcionar:
fonte
tar --version
dá GNU 1.23 aqui.tar vzcf ...
para ver se algum arquivo errado foi incluído.Frederik Deweerdt forneceu uma solução que funciona no GNU tar (usado no Linux, Cygwin, FreeBSD, OSX, possivelmente em outros), mas não em outros sistemas, como NetBSD, OpenBSD ou Solaris.
O POSIX não especifica o
tar
comando (porque varia muito entre as variantes do unix) e introduz opax
comando. A opção-w
significa produzir um arquivo (-r
extrações) e-x
seleciona o formato do arquivo. A opção-s '!BRE!!'
exclui todos os arquivos cujo caminho corresponde à expressão regular básica BRE.fonte
Desde
bsdtar 3.0.3 - libarchive 3.0.3
(e talvez mais cedo), há uma nova opção (específica do Mac OS X) para obsdtar
comando chamado--disable-copyfile
para suprimir a criação de._
arquivos. As versões mais antigas detar
não têm a--disable-copyfile
opção, mas a configuração da variável de ambienteCOPYFILE_DISABLE=1
deve funcionar.fonte
bsdtar 2.8.3 - libarchive 2.8.3
10.7.5
--disable-copyfile
Siga esses passos:
Encontre todos os
._
arquivos e liste-os usando-ls
para que você possa ver todos os._
arquivos e, finalmente, excluí-los.Crie o arquivo .tar usando.
fonte