1

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

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 ответ1

0

Кажется, решение заключается в следующем:

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .