Você precisa citar o padrão de exclusão, como você já tentou fazer; O primeiro deve realmente funcionar, mesmo se houver uma solução "melhor".
Mas vamos ver um exemplo simplificado para trabalhar; Criei alguns diretórios com arquivos com .foo
e .bar
extensions:
Aqui eu corro find
para listar meu diretório de teste - ele mostra todos os arquivos e diretórios:
$ find
.
./1.bar
./1.foo
./sub1
./sub1/sub2
./sub1/sub2/1.bar
./sub1/sub2/1.foo
./sub1/1.foo
./sub1/1.bar
Agora, podemos ver o que funciona. (tiramos o arquivo de saída do caminho, não é relevante para a correspondência).
Empacotando todos os arquivos:
$ zip -r /tmp/out.zip *
adding: 1.bar (stored 0%)
adding: 1.foo (stored 0%)
adding: sub1/ (stored 0%)
adding: sub1/sub2/ (stored 0%)
adding: sub1/sub2/1.bar (stored 0%)
adding: sub1/sub2/1.foo (stored 0%)
adding: sub1/1.foo (stored 0%)
adding: sub1/1.bar (stored 0%)
Embalagem excluindo .foo
arquivos:
$ rm /tmp/out.zip
$ zip -r /tmp/out.zip * -x '*.foo'
adding: 1.bar (stored 0%)
adding: sub1/ (stored 0%)
adding: sub1/sub2/ (stored 0%)
adding: sub1/sub2/1.bar (stored 0%)
adding: sub1/1.bar (stored 0%)
Works!
Tentando novamente com seu primeiro padrão:
$ rm /tmp/out.zip
$ zip -r /tmp/out.zip * -x \*.foo
adding: 1.bar (stored 0%)
adding: sub1/ (stored 0%)
adding: sub1/sub2/ (stored 0%)
adding: sub1/sub2/1.bar (stored 0%)
adding: sub1/1.bar (stored 0%)
Funciona também!
Então ... dê uma olhada no que você realmente fez lá.
Primeiro, você pode remover a opção -q
de "quiet", ocultando as mensagens padrão mostradas em meus exemplos.
Como próximo passo, adicione a opção -v
para "verbose", para ver mais detalhes - talvez muitos, mas talvez você possa identificar algo interessante.
Dos comentários, vejo que remover o -q
já ajudou;
O problema subjacente era que o comando zip usado para teste foi modificado pela existência do arquivo de saída.
Tecnicamente, ele se modificou mesmo ...
De man zip
:
Command format. The basic command format is
zip options archive inpath inpath ...
where archive is a new or existing zip archive and inpath is a directory or
file path optionally including wildcards. When given the name of an exist‐
ing zip archive, zip will replace identically named entries in the zip ar‐
chive (matching the relative names as stored in the archive) or add entries
for new names.