Por que a opção -x exclude no zip não parece realmente excluir o caminho?

1

Usando o Raspbian em um Raspberry Pi, quero fazer o backup dos arquivos / etc, mas não de todos eles. Eu gostaria de excluir o / etc / alternatives, então usei este comando:

sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip /etc/* –x /etc/alternatives/*

Por que isso não funciona? Ele continua incluindo o conteúdo de / etc / alternatives como todas as outras pastas em / etc.

Eu tentei essas variações e elas não funcionaram

sudo zip -r –x /etc/alternatives/* @ /home/pi/backup/$timestamp/etcfilesall.zip /etc/*
sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip /etc/* –x /etc/alternatives
sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip /etc/* –x '/etc/alternatives'
sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip /etc/* –x '/etc/alternatives/*'

Sob a opção -r para recursão, a ajuda zip -h2 diz "Use -i e -x para incluir ou excluir caminhos", então parece que o que eu estou tentando fazer deve ser suportado.

    
por tim11g 13.02.2016 / 18:52

2 respostas

3

O problema é que o "-" antes do "x" (para a opção "-x") não é realmente um sinal ASCII menos na pergunta do OP. Em vez disso, é o Unicode u + 2013 (parece o mesmo, mas não age da mesma forma).

Se o comando é digitado como esperado, ele funciona como esperado para o último exemplo do OP (corrigido aqui):

sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip /etc/* -x '/etc/alternatives/*'

Provavelmente, este foi um problema resultante do corte / colagem de algum site.

Leitura adicional:

por 13.02.2016 / 20:29
0

De man zip page:

zip -r foo foo -x \*.o

which will include the contents of foo in foo.zip while excluding all the files that end in .o. The backslash avoids the shell filename substitution, so that the name matching is performed by zip at all directory levels.

Você deve certificar-se de que seu glob * esteja expandido não pelo shell, mas pelo utilitário zip , senão ele afetará somente os arquivos diretamente no diretório / etc / alternatives e não direcionará os subdiretórios. Isso pode ser feito adicionando contrabarra na frente de * ou citando:

sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip /etc/* –x /etc/alternatives/\*

No entanto, parece que você já tentou de maneira semelhante - não está claro para mim por que não funcionou para você, enquanto deveria. Ainda assim, existem outras maneiras de obter um efeito semelhante, como usar ferramentas adicionais para excluir arquivos que você não deseja antes de chamar o utilitário zip :

sudo zip -r /home/pi/backup/$timestamp/etcfilesall.zip $(sudo find /etc | grep -v ^/etc/alternatives)
    
por 13.02.2016 / 20:09

Tags