2011-07-19 10:19:13 +0000 2011-07-19 10:19:13 +0000
121
121

Unix-Zip-Verzeichnis, aber bestimmte Unterverzeichnisse (und alles darin) ausgeschlossen

Ich versuche, ein Verzeichnis zu zippen (auf Unix über SSH), aber ich muss ein paar Unterverzeichnisse (und alle Dateien und Verzeichnisse darin) ausschließen.

Bisher habe ich dies:

zip -r myarchive.zip dir1 -x dir1/ignoreDir/**/*

Das scheint aber nicht zu funktionieren.

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/* dir1/ignoreDir2/*

Das schließt jedoch immer noch Unterverzeichnisse innerhalb von ignoreDir1 und ignoreDir2 ein.

Die Struktur der Unterverzeichnisse in den Verzeichnissen, die ich ausschließen möchte, ist ziemlich umfangreich, so dass ich nicht einfach jedes Verzeichnis zum Argument -x hinzufügen kann.

Weiß jemand, wie man das macht?

Antworten (7)

134
134
134
2011-07-19 10:32:23 +0000

Ich war so nah dran!

Der eigentliche Befehl, den ich brauche, ist:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/ **\* dir1/ignoreDir2/** \*
73
73
73
2012-10-31 11:43:43 +0000

Für mein spezielles System musste ich, um ein Verzeichnis auszuschließen, Anführungszeichen um meine ausgeschlossenen Verzeichnisse setzen und es funktionierte wie ein Zauber:

zip -r myarchive.zip dir1 -x "dir1/ignoreDir1/*" "dir1/ignoreDir2/*"

Hinweise:

– dies schloss sowohl das auszuschließende Verzeichnis als auch alle Dateien darin aus.

– Sie müssen den vollständigen Pfad zu den Verzeichnissen verwenden, die Sie ausschließen wollen!

9
9
9
2013-10-30 11:31:16 +0000

@sulman mit:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/\*\*\* dir1/ignoreDir2/\*\*\*

wird immer noch den leeren Ordner dir1/ignoreDir1/ in das Zip-Archiv aufnehmen, mit:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1\*\* dir1/ignoreDir2\*\*

wird den Trick machen, Sie können auch ein führendes ** verwenden, um in Unterordnern zu suchen, anstatt nur in dir1

7
7
7
2012-09-17 05:00:36 +0000

Das Folgende funktioniert

zip -r myarchive.zip dir1 -x dir1/ignoreDir1* dir1/ignoreDir2*

Wofür brauchten Sie das **, @sulman?

Bei mir funktioniert es wie folgt:

[root@ip-00-000-000-000 dir1]# ls -lrt dir1/ 
total 16
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir1
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir2
drwxr-xr-x 2 root root 4096 Oct 31 07:39 dir3
-rw-r--r-- 1 root root 8 Oct 31 07:39 test.txt

[root@ip-00-000-000-000 temp]# zip -r dir1.zip dir1 -x dir1/ignoredir1\* dir1/ignoredir2\*
  adding: dir1/ (stored 0%)
  adding: dir1/dir3/ (stored 0%)
  adding: dir1/dir3/test3.txt (deflated 13%)
  adding: dir1/test.txt (stored 0%)
1
1
1
2016-01-22 14:39:17 +0000

Genau wie andere Antworten, aber Verzeichnisse ganz ausschließen, statt alle Inhalte von Verzeichnissen auszuschließen:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/\* dir1/ignoreDir2/\*
0
0
0
2014-10-03 18:28:57 +0000

Ich fand dies, um von David R Heffelfinger :

zip -r myarchive.zip dir1 -x dir1/ignoreDir1\* dir1\ignorDir2\*

Es schloss das Verzeichnis und dessen Inhalt aus.

-1
-1
-1
2015-12-01 13:29:01 +0000

Bei mir funktionierte: zip -9 -r ~/folded.zip online -x folder/folder2/folder3/foldern/ *.

Scheint so zu sein, dass der Asterisk escaped werden muss.