Zip recursivo con exclusión de algunos directorios

Zip recursivo con exclusión de algunos directorios

Me gustaría comprimir el directorio pero excluir algunos subdirectorios. Digamos que tengo tal estructura:

directory
   subdirectory 1
   subdirectory 2
     project 1
       html
         directory 1 
         vendor
         node_modules
         ... (other directories)
     project 2
       html
         directory 2 
         vendor
         node_modules
         ... (other directories) 

Me gustaría comprimir todo el directorio principal pero me gustaría excluir rutas como esta:

subdirectory2/*/html/vendor/**
subdirectory2/*/html/node_modules/**

dónde:

  • *- es un directorio de un nivel
  • **- es un directorio con archivos y subdirectorios

El problema es que project 1son project 2bastante dinámicos: hay varios. También tenga en cuenta que vendorlos directorios (y también en teoría node_modules) se pueden colocar en otros lugares, por ejemplo, por project 1/html/public/vendorlo que no me gustaría excluir solo vendorel subdirectorio, sino solo el subdirectorio específico vendorque se encuentra exactamente en determinados directorios html de proyectos.

¿Es posible hacer algo tan complejo usando solo zipun comando o tal vez debería escribirse algún script bash para esto?

Estoy usando MacOS si hay alguna diferencia.

Lo que he logrado hasta ahora es:

cd directory && zip test-zip.zip  * -r -T -x */*/html/vendor/** */*/html/node_modules/**

Parece que casi funciona, pero crea directorios vacíos de proveedores y módulos de nodos (pero no incluye su contenido)

Respuesta1

Parece que la solución es:

cd directory && 
zip test-zip.zip  * -r -T -x "*/*/html/vendor/" "*/*/html/node_modules/" "*/*/html/vendor/**" "*/*/html/node_modules/**"

así que excluyo todo en estos directorios y en esos directorios también y también envuelvo todo entre comillas para que se expanda de manera válida.

información relacionada