Quiero excluir todos los archivos .zip en todos los subdirectorios de la carpeta principal que estoy comprimiendo pero no funciona. He revisado las man zip
paginasesteyestepreguntas 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 zip
comandoactualizacionesen 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 .foo
y .bar
extensiones:
Aquí corro find
para 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 .foo
archivos:
$ 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 -q
opción "silencio", ocultando los mensajes estándar que se muestran en mis ejemplos.
Como siguiente paso, agregue la -v
opción "detallado" para ver más detalles; tal vez demasiados, pero tal vez pueda detectar algo interesante.
Por los comentarios veo que eliminar los -q
ya 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.