Wie kann ich Verzeichnisse ausschließen und Dateien komprimieren?

32

Ich muss ein Verzeichnis mit Ausnahme einiger Unterverzeichnisse und Dateien komprimieren. Ich habe das benutzt:

zip -r zipfile.zip . -x ".*" -x "app/bower_components" -x "node_modules" -x "*.zip" -x "node_modules"

ohne Erfolg; node_modulesist ein Ordner im Hauptordner, während er bower_componentssich in der Ordner-App befindet

arpho
quelle
Was ist Ihr Ergebnis und was sind Ihre erwarteten Ergebnisse?
DEN
Sie möchten alle oder nur einige Unterverzeichnisse ausschließen ?
Sergiy Kolodyazhnyy

Antworten:

36

Ich rate einfach, was Sie wollen.

-x ".*"

schließen Sie alle Dateien aus, die mit einem Punkt beginnen

mach es wie:

-x .\*

Alle Dateien ausschließen (mit einem Punkt im Dateinamen)

mach es wie:

-x \*.\*

-

-x "app/bower_components" -x "node_modules"

Schließen Sie dieses Verzeichnis und alle darin enthaltenen Dateien aus

mach es wie:

-x app/bower_components/\* -x node_modules/\*

-

-x "*.zip"

schließe alle zip-Dateien aus

mach es wie:

-x \*.zip

Sie schließen node_modules zweimal aus

DEN
quelle
2
danke ich habe es verstanden, mit verschiedenen post angekommen: zip -r * app / * -x \ app / bower_components / * -x \ node_modules / * -x * .zip
arpho
@arpho Ihr Kommentar oben sollte eine Antwort sein, wie es scheint, für mich zu arbeiten ...
Chesedo
7

So etwas sollte den Trick machen:

zip -r zipped.zip dir1/ -x */\.* *.git* \.* *.zip *.csv *.json *.rb *.bak *.swp *.back *.merge *.txt *.sh dir1/node_modules/**\* dir1/bower_components/**\* dir1/dist/**.*

Im Folgenden finden Sie -xeine Liste der auszuschließenden Verzeichnisse und Dateitypen (Erweiterungstypen).

MikeiLL
quelle
Jetzt, wo ich weiß, **\*ist das für rekursiven Ausschluss. Danke vielmals.
Duc Tran
6

Angenommen, Ihr Verzeichnis ist ein Git-Repository (und der Frage nach ist dies sehr wahrscheinlich), können Sie der .gitignoreDatei Verzeichnisse hinzufügen, die Sie ausschließen möchten, und den git archiveBefehl verwenden, um den Inhalt Ihres Verzeichnisses zu komprimieren:

git archive --format=zip HEAD -o zipfile.zip

In Ihrem Beispiel .gitignoremüsste die Datei folgendermaßen aussehen:

node_modules
app/bower_components
Jakub Kukul
quelle
3

Das funktioniert perfekt für mich unter Ubuntu 16.04:

sudo zip -r /home/user/backup/$(date +"%Y-%m-%d")/home_user.zip /home/user -x "*backup*" -x "*.cache*" -x "*test*"
Tarik
quelle
0

Überspringe in jedem Projekt node_modules wie folgt:

for i in */; do zip -r "${i%/}.zip" "$i" -x "*/\node_modules/*" ; done
nils petersohn
quelle