
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 1
und project 2
ziemlich dynamisch sind – es gibt mehrere davon. Beachten Sie auch, dass vendor
Verzeichnisse (und theoretisch auch node_modules
) an anderen Stellen platziert werden können, z. B. in, project 1/html/public/vendor
daher möchte ich nicht nur vendor
Unterverzeichnisse ausschließen, sondern nur bestimmte vendor
Unterverzeichnisse, 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