Excluye archivos específicos de todos los subdirectorios al crear un archivo zip

Excluye archivos específicos de todos los subdirectorios al crear un archivo zip

Quiero excluir todos los archivos .zip en todos los subdirectorios de la carpeta principal que estoy comprimiendo pero no funciona. He revisado las man zippaginasesteyestepreguntas sin éxito.

Yo he tratado:

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

y todavía obtengo todos los archivos zip incluidos (excepto el de la carpeta principal generado con este comando antes).

EDITAR: El problema era que ya tenía un FILE.zip en la carpeta que incluía algunos archivos zip. El zipcomandoactualizacionesen lugar decreaun nuevo archivo comprimido si el archivo que intenta crear ya existe, incluso si no indica la opción -u.

Respuesta1

Debe citar el patrón de exclusión, como ya intentó hacer; El primero debería funcionar, incluso si existe una solución "mejor".

Pero veamos un ejemplo simplificado con el que trabajar; Creé algunos directorios con archivos .fooy .barextensiones:

Aquí corro findpara enumerar mi directorio de prueba; muestra todos los archivos y directorios:

$ find
.
./1.bar
./1.foo
./sub1
./sub1/sub2
./sub1/sub2/1.bar
./sub1/sub2/1.foo
./sub1/1.foo
./sub1/1.bar

Ahora, podemos ver qué funciona
(eliminamos el archivo de salida, no es relevante para la coincidencia).

Empaquetando todos los archivos:

$ 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%)

Embalaje excluyendo .fooarchivos:

$ 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%)

¡Obras!
Intentando de nuevo con tu primer patrón:

$ 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 también!

Entonces... mira de cerca lo que realmente corriste allí.

Primero, podrías eliminar la -qopción "silencio", ocultando los mensajes estándar que se muestran en mis ejemplos.
Como siguiente paso, agregue la -vopción "detallado" para ver más detalles; tal vez demasiados, pero tal vez pueda detectar algo interesante.


Por los comentarios veo que eliminar los -qya ayudó;

El problema subyacente fue que el comando zip utilizado para las pruebas fue modificado por la existencia del archivo de salida.
Técnicamente, se había modificado incluso...

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.

información relacionada