Quero excluir todos os arquivos .zip em todos os subdiretórios da pasta pai que estou compactando, mas não funciona. Eu verifiquei as man zip
páginas,esseeesseperguntas sem sucesso.
Eu tentei:
zip -q -r FILE.zip * -x \*.zip
zip -q -r FILE.zip * -x\*.zip
zip -q -r FILE.zip * -x */\.zip
zip -q -r FILE.zip * -x \*.zip
zip -q -r FILE.zip * -x \*.zip\*
zip -q -r FILE.zip * -x*.zip
e ainda recebo todos os arquivos zip incluídos (exceto aquele na pasta pai gerada com este comando antes).
EDIT: O problema é que eu já tinha um FILE.zip na pasta que incluía alguns arquivos zip. O zip
comandoatualizaçõesem vez decriaum novo arquivo compactado se o arquivo que ele tenta criar já existir, mesmo que você não indique a opção -u.
Responder1
Você precisa citar o padrão de exclusão, como já tentou fazer; O primeiro deve realmente funcionar, mesmo que exista uma solução “melhor”.
Mas vejamos um exemplo simplificado para trabalhar; Criei alguns diretórios com arquivos .foo
e .bar
extensões:
Aqui 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 apenas 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%)
Funciona!
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 -q
opção "silêncio", ocultando as mensagens padrão mostradas nos meus exemplos.
Como próximo passo, adicione a -v
opção "detalhado", para ver mais detalhes - talvez muitos, mas talvez você consiga identificar algo interessante.
Pelos comentários vejo que retirar 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 até...
Deman 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.