Рекурсивный zip-архив с исключением некоторых каталогов

Рекурсивный zip-архив с исключением некоторых каталогов

Я хотел бы заархивировать каталог, но исключить некоторые подкаталоги. Допустим, у меня такая структура:

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) 

Я хотел бы заархивировать весь основной каталог, но исключить такие пути:

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

где:

  • *- одноуровневый каталог
  • **- это каталог с любыми файлами и подкаталогами

Проблема в том, что эти project 1и project 2довольно динамичны - их несколько. Также обратите внимание, что vendorкаталоги (и также в теории node_modules) могут быть размещены в некоторых других местах, например, в , project 1/html/public/vendorпоэтому я бы не хотел исключать просто vendorподкаталог, а только конкретный vendorподкаталог, который находится именно в указанных html-каталогах проектов.

Можно ли сделать такую ​​сложную вещь, используя только zipкоманду, или, может быть, для этого нужно написать какой-то bash-скрипт?

Если это имеет значение, я использую MacOS.

Чего я добился на данный момент:

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

Кажется, это почти работает, но оно создает пустые каталоги модулей вендора и узла (но не включает их содержимое)

решение1

Кажется, решение такое:

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

поэтому я исключаю все в этом каталоге и в тех каталогах тоже, а также заключаю все в кавычки, чтобы расширить его допустимым образом

Связанный контент