Ich möchte alle .zip-Dateien in allen Unterverzeichnissen des übergeordneten Ordners, den ich komprimiere, ausschließen, aber das funktioniert nicht. Ich habe die man zip
Seiten überprüft,DasUndDasFragen ohne Erfolg.
Ich habe versucht:
zip -q -r FILE.zip * -x \*.zip
zip -q -r FILE.zip * -x\*.zip
zip -q -r FILE.zip * -x */\.zip
zip -q -r FILE.zip * -x \*.zip
zip -q -r FILE.zip * -x \*.zip\*
zip -q -r FILE.zip * -x*.zip
und ich bekomme immer noch alle ZIP-Dateien eingeschlossen (außer der im übergeordneten Ordner, der zuvor mit diesem Befehl generiert wurde).
EDIT: Das Problem war, dass ich bereits eine FILE.zip im Ordner hatte, die einige Zip-Dateien enthielt. Der zip
BefehlAktualisierunganstattschaffteine neue komprimierte Datei, wenn die Datei, die es erstellen soll, bereits vorhanden ist, auch wenn Sie die Option -u nicht angeben.
Antwort1
Sie müssen das Ausschlussmuster zitieren, wie Sie es bereits versucht haben. Das erste sollte eigentlich funktionieren, auch wenn es eine „bessere“ Lösung gibt.
Aber schauen wir uns ein vereinfachtes Beispiel zum Arbeiten an. Ich habe einige Verzeichnisse mit Dateien .foo
und .bar
Erweiterungen erstellt:
Hier führe ich find
eine Liste meines Testverzeichnisses aus. Es werden alle Dateien und Verzeichnisse angezeigt:
$ find
.
./1.bar
./1.foo
./sub1
./sub1/sub2
./sub1/sub2/1.bar
./sub1/sub2/1.foo
./sub1/1.foo
./sub1/1.bar
Jetzt können wir einfach sehen, was funktioniert
(wir räumen die Ausgabedatei aus dem Weg, sie ist für die Übereinstimmung nicht relevant).
Alle Dateien packen:
$ zip -r /tmp/out.zip *
adding: 1.bar (stored 0%)
adding: 1.foo (stored 0%)
adding: sub1/ (stored 0%)
adding: sub1/sub2/ (stored 0%)
adding: sub1/sub2/1.bar (stored 0%)
adding: sub1/sub2/1.foo (stored 0%)
adding: sub1/1.foo (stored 0%)
adding: sub1/1.bar (stored 0%)
Verpackung ohne .foo
Dateien:
$ rm /tmp/out.zip
$ zip -r /tmp/out.zip * -x '*.foo'
adding: 1.bar (stored 0%)
adding: sub1/ (stored 0%)
adding: sub1/sub2/ (stored 0%)
adding: sub1/sub2/1.bar (stored 0%)
adding: sub1/1.bar (stored 0%)
Funktioniert!
Versuchen Sie es noch einmal mit Ihrem ersten Muster:
$ rm /tmp/out.zip
$ zip -r /tmp/out.zip * -x \*.foo
adding: 1.bar (stored 0%)
adding: sub1/ (stored 0%)
adding: sub1/sub2/ (stored 0%)
adding: sub1/sub2/1.bar (stored 0%)
adding: sub1/1.bar (stored 0%)
Funktioniert auch!
Also... schauen Sie sich genau an, was Sie da wirklich ausgeführt haben.
Zunächst könnten Sie die Option „ruhig“ entfernen -q
, um die in meinen Beispielen angezeigten Standardmeldungen auszublenden.
Fügen Sie im nächsten Schritt die -v
Option „ausführlich“ hinzu, um weitere Details anzuzeigen – vielleicht zu viele, aber vielleicht können Sie etwas Interessantes entdecken.
Aus den Kommentaren entnehme ich, dass das Entfernen -q
bereits geholfen hat;
Das zugrunde liegende Problem bestand darin, dass der zum Testen verwendete Zip-Befehl durch die Existenz der Ausgabedatei geändert wurde.
Technisch gesehen hatte er sich sogar selbst geändert ...
Ausman zip
:
Command format. The basic command format is
zip options archive inpath inpath ...
where archive is a new or existing zip archive and inpath is a directory or
file path optionally including wildcards. When given the name of an exist‐
ing zip archive, zip will replace identically named entries in the zip ar‐
chive (matching the relative names as stored in the archive) or add entries
for new names.