Ich habe ein Skript zusammengestellt, um einige Dateioperationen für mich auszuführen. Ich verwende den Platzhalteroperator *
Funktionen auf alle Dateien eines Typs anzuwenden, aber eines verstehe ich nicht. Ich kann unzip
alle Dateien in einem Ordner wie diesem
unzip "*".zip
Um jedoch alle ZIP-Dateien danach zu entfernen, muss ich tun
rm *.zip
Das heißt, die Anführungszeichen sind nicht erwünscht. Das Entpacken hingegen funktioniert nicht, wenn ich nur das * gebe (gibt mir eine Warnung, dass „files were not matched“).
Warum ist das anders? Für mich scheint dies genau die gleiche Operation zu sein. Oder verwende ich den Platzhalter falsch?
Einführungen in die Wild Card in Unix gehen nicht wirklich darauf ein, und ich konnte nichts im rm
finden oder zip
Dokumente.
Ich verwende das Terminal auf einem Mac (Yosemite).
Akzeptierte Antwort:
Du hast die Situation sehr gut beschrieben. Das letzte Stück des Puzzles ist das unzip
kann Platzhalter selbst behandeln:
http://www.info-zip.org/mans/unzip.html
ARGUMENTE
Datei[.zip]
…
Wildcard-Ausdrücke ähneln denen, die in häufig verwendeten Unix-Shells (sh, ksh, csh) unterstützt werden, und können enthalten:
* entspricht einer Folge von 0 oder mehr Zeichen
Durch das Anführen des Platzhalters * haben Sie Ihre Shell daran gehindert, es zu erweitern, sodass unzip
sieht den Platzhalter und verarbeitet ihn gemäß seiner eigenen Logik.
rm
dagegen unterstützt allein keine Platzhalter , also wird beim Versuch, einen Platzhalter in Anführungszeichen zu setzen, rm
angewiesen um stattdessen nach einem wörtlichen Sternchen im Dateinamen zu suchen.
Der Grund, warum unzip *.zip
wird nicht funktioniert, ist das unzip
Die Syntax erlaubt einfach nicht mehrere ZIP-Dateien; wenn es mehrere Parameter gibt, erwartet es, dass der zweite und die folgenden Dateien im Archiv sind:
entpacken [-Z] [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]] Datei[.zip] [Datei(en) …] [-x xDatei(en) …] [-d exdir]