Por que o tar --exclude = “. *” cria um arquivo vazio?

7

Tudo que li diz que para excluir .svn e .htaccess e outros arquivos ocultos ao criar um arquivo tar, use o padrão --exclude=".*" .

Quando tento, recebo um arquivo vazio. Quando deixo de fora a opção --exclude long, tudo é arquivado.

Aqui está o comando completo que estou usando:

tar -czvf ../_migrate/archive_2012-05-07.tgz --exclude=".*" ./*

Eu também tentei essa variante, sem diferença nos resultados:

tar -czvf ../_migrate/archive_2012-05-07.tgz --exclude=".?*" ./*
    
por Tom Auger 07.05.2012 / 21:36

3 respostas

6

Você parece estar usando o GNU tar . Correspondência de padrões no GNU tar funciona em todo o caminho e não Parar em / caracteres. Como você está usando ./ para sua lista de arquivos, isso significa que cada arquivo corresponderá a ./* , que também corresponde a .?* . Eu tentaria algo como --exclude='.[^/]*' , talvez.

    
por 08.05.2012 / 15:58
10

Seu padrão exclui ".", que é o diretório que você está tentando arquivar. Use ".? *" Como padrão.

    
por 07.05.2012 / 21:54
3

.* irá sempre corresponder a qualquer arquivo que seja incluído, já que você está usando arquivos de . (que por si só coincide com .* ).

Você não precisa fazer nada para excluir os arquivos mencionados, eles não serão correspondidos pela globagem. O * glob não corresponde aos arquivos com prefixo de ponto, a menos que você ative manualmente essa funcionalidade (por meio de dotglob ou equivalente ao seu shell).

    
por 07.05.2012 / 21:54

Tags