2013-10-29 9 views
6

Hallo Ich habe eine Datei entpacken, die ein Verzeichnis haben könnte, und ich möchte alles in diesem Verzeichnis ausschließen, habe ich viele Optionen ausprobiert und sah auch hier, aber nicht scheint um eine gute Lösung zu finden.linux unzip ausschließen alles im Ordner und darunter

Dies sind der Inhalt der Zip-Datei: Bitte beachten Sie, um die Tiefe der EXCLUDE Ordner nicht bekannt ist, aber wir müssen alles

$unzip -l patch2.zip 
Archive: patch2.zip 
    Length  Date Time Name 
--------- ---------- ----- ---- 
     0 2013-10-29 17:42 EXCLUDE/ 
     0 2013-10-29 17:24 EXCLUDE/inner/ 
     0 2013-10-29 17:24 EXCLUDE/inner/inner1.txt 
     0 2013-10-29 15:45 EXCLUDE/file.txt 
     0 2013-10-29 15:44 patch.jar 
     0 2013-10-29 15:44 system.properties 
---------      ------- 
     0      6 files 

ich diesen Befehl ausschließen versuchte, die nur die Dateien darin extrahieren, aber nicht der Ordner und sein Inhalt:

$unzip -l patch2.zip -x EXCLUDE/* 
Archive: patch2.zip 
    Length  Date Time Name 
--------- ---------- ----- ---- 
     0 2013-10-29 17:42 EXCLUDE/ 
     0 2013-10-29 17:24 EXCLUDE/inner/ 
     0 2013-10-29 17:24 EXCLUDE/inner/inner1.txt 
     0 2013-10-29 15:44 patch.jar 
     0 2013-10-29 15:44 system.properties 
---------      ------- 
     0      5 files 

Danke für die Hilfe.

Antwort

8

Sie müssen das Ausschlussmuster angeben, damit es an unzip übergeben wird. Andernfalls wird es durch die Shell erweitert, bevor es an unzip übergeben wird.

Versuchen:

unzip patch2.zip -x "EXCLUDE/*" 
+0

+1 für die Antwort, da es in der Nähe der Frage des OP ist. Mein eigenes ist nur eine "gut zu wissen" Alternative ^^ (die jetzt wenig bekannt ist, während es in den frühen linux Tagen ziemlich berühmter war) –

+0

Danke das funktionierte tadellos. Kannst du bitte erklären was meinst du mit "es wird zum entpacken weitergegeben. Ansonsten wird es von der Shell erweitert bevor es zum entpacken übergeben wird". – Ravi

+1

@Ravi Lesen Sie über [Globbing] (http://tldp.org/LDP/abs/html/globbingref.html), wenn die Shell Platzhaltermuster in Dateinamen konvertiert. Wenn Sie zum Beispiel "echo *" ausführen, "expandiert" die Shell "*" in eine Liste von Dateinamen, z. 'file1',' file2' etc. vor der Ausführung von 'echo'. Als Ergebnis wird echo * 'zu echo file1 file2. Das 'echo' Programm sieht niemals den Platzhalter, es sieht nur die Argumente' Datei1' und 'Datei2'. Wenn Sie jedoch das Muster "echo" * "" zitieren, führt die Shell diese Erweiterung nicht aus und das Muster wird als Argument an das Programm übergeben, das es beliebig interpretieren kann. – dogbane

0

@dogbane Antwort ist richtig.

Aber ich hinzufügen, noch eine andere [Ich hoffe] interresting Option, wie Sie auf Linux sind:

mc 

(aka: Midnight Commander)

es starten, und dann: auf der rechten Seite, Navigieren Sie zu der Stelle, an der Ihre Dateien enden sollen, und navigieren Sie im linken Fensterbereich in die ZIP - Datei. Wählen Sie auf der ersten Ebene + die gewünschten Objekte aus (wählen Sie alle aus und heben Sie die Auswahl des EXCLUDE - Ordners auf) Beispiel)

mc ist sehr flexibel und nett zu verwenden, vor allem zum tar/entpacken/Zip/Verschieben/Löschen/Umbenennen von Dateien ... (unter Windows, ist ein Äquivalent TotalCommander, und ich verwende seine "synchronisieren" -Option sehr oft, um Backups und Herkunft synchron zu halten). Sie können in Archiven navigieren, als wären sie unkomprimiert (versuchen Sie, die tatsächliche Dekomprimierung auf den "navigierenden" Teil zu beschränken, damit Sie sie nicht zweimal dekomprimieren).