Eu tenho essa linha muito simples em um script bash que é executado com sucesso (ou seja, produzindo o _data.tar
arquivo), exceto que ele não exclui os subdiretórios, é dito que ele exclui por meio da --exclude
opção:
/bin/tar -cf /home/_data.tar --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*' /data
Em vez disso, produz um _data.tar
arquivo que contém tudo em / data, incluindo os arquivos nos subdiretórios que eu queria excluir.
Alguma idéia do porquê? e como consertar isso?
Atualização Eu implementei minhas observações com base no link fornecido na primeira resposta abaixo (dir de nível superior primeiro, sem espaço em branco após a última exclusão):
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*'
Mas isso não ajudou. Todos os subdiretórios "excluídos" estão presentes no _data.tar
arquivo resultante .
Isso é intrigante. Se isso é um bug no tar atual (GNU tar 1.23, no CentOS 6.2, Linux 2.6.32) ou "extrema sensibilidade" do tar para espaços em branco e outros erros fáceis de perder, considero isso um bug. Para agora.
Isso é horrível : tentei o insight sugerido abaixo (sem rastro /*
) e ele ainda não funciona no script de produção:
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1' --exclude='/data/sub2' --exclude='/data/sub3' --exclude='/data/sub4'
Não vejo diferença entre o que tentei e o que Richard Perrin tentou, exceto as aspas e 2 espaços em vez de 1. Vou tentar isso (devo esperar que o script noturno seja executado como o diretório a ser copiado é enorme) e relata.
/bin/tar -cf /home/_data.tar /data --exclude=/data/sub1 --exclude=/data/sub2 --exclude=/data/sub3 --exclude=/data/sub4
Estou começando a pensar que todas essas tar --exclude
sensibilidades não são alcatrão, mas algo no meu ambiente, mas então o que poderia ser isso?
Funcionou! A última variação tentada (sem aspas simples e espaço único em vez de espaço duplo entre os --exclude
) testou o funcionamento. Estranho, mas aceitando.
Inacreditável! Acontece que uma versão mais antiga tar
(1.15.1) excluiria apenas se o dir de nível superior fosse o último na linha de comando. Esse é exatamente o oposto de como a versão 1.23 exige. PARA SUA INFORMAÇÃO.