Rekursives Zip mit Ausschluss einiger Verzeichnisse

Rekursives Zip mit Ausschluss einiger Verzeichnisse

Ich möchte das Verzeichnis komprimieren, aber einige Unterverzeichnisse ausschließen. Nehmen wir an, ich habe folgende Struktur:

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) 

Ich möchte das gesamte Hauptverzeichnis komprimieren, aber Pfade wie diesen ausschließen:

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

Wo:

  • *- ist ein einstufiges Verzeichnis
  • **- ist ein Verzeichnis mit allen Dateien und Unterverzeichnissen

Das Problem ist, dass diese project 1und project 2ziemlich dynamisch sind – es gibt mehrere davon. Beachten Sie auch, dass vendorVerzeichnisse (und theoretisch auch node_modules) an anderen Stellen platziert werden können, z. B. in, project 1/html/public/vendordaher möchte ich nicht nur vendorUnterverzeichnisse ausschließen, sondern nur bestimmte vendorUnterverzeichnisse, die sich genau in bestimmten HTML-Verzeichnissen von Projekten befinden.

Ist es möglich, solch eine komplexe Sache nur mit einem Befehl zu erstellen zip, oder müsste hierfür vielleicht ein Bash-Skript geschrieben werden?

Ich verwende MacOS, falls das einen Unterschied macht.

Was ich bisher erreicht habe ist:

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

Es scheint fast zu funktionieren, aber es erstellt leere Vendor- und Node-Modulverzeichnisse (ohne deren Inhalt einzuschließen).

Antwort1

Die Lösung scheint zu sein:

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

also schließe ich alles in diesem Verzeichnis und auch in jenen Verzeichnissen aus und setze alles in Anführungszeichen, damit es gültig erweitert werden kann

verwandte Informationen