Ich möchte alle Dateien in einem Verzeichnis auflisten, die mit 'abc' beginnen und mit '.zip' enden.
Ich versuche zu benutzen ls
.
Das Verzeichnis enthält viele Zip-Dateien, die mit abc<date>
und beginnen xvz<date>
. Ich möchte nur die Liste der bekommenabc<date>.zip
ls -1 | grep "abc$(your_date).zip"
?Antworten:
ls
führt keinen Mustervergleich für Dateinamen durch. Es werden nur der Inhalt der Verzeichnisse und die Dateien aufgelistet, die als Argumente angegeben werden.Ihre Shell hingegen verfügt über eine Funktion namens Globbing oder Dateinamengenerierung , die ein Muster in eine Liste von Dateien erweitert, die diesem Muster entsprechen.
Hier wäre dieses Glob-Muster
abc*.zip
(*
ein Platzhalter, der für eine beliebige Anzahl von Zeichen steht ).Sie können es an einen beliebigen Befehl übergeben, z. B.
printf
zum Drucken:Sie können es auch übergeben
ls -l
, um die Attribute dieser Dateien anzuzeigen:(Wir brauchen,
-d
weil, wenn eine dieser Dateien vom Typ Verzeichnis ist ,ls
ihren Inhalt sonst auflisten würde).Oder um sie
unzip
zu extrahieren, wenn nurunzip
mehr als eine Datei gleichzeitig extrahiert werden könnte. Leider ist dies nicht der Fall, sodass Sie entwederxargs -n1
einefor
Schleife oder eine Schleife verwenden müssen:Oder:
Tatsächlich würde
unzip
es jedoch eher wie ein Port eines MS-DOS-Befehls sein,unzip
selbst sein Argument als Glob zu behandeln. Mit anderen Worten,unzip 'abc*.zip'
entpackt nicht die aufgerufene Dateiabc*.zip
(ein perfekt gültiger Dateiname unter Unix, nicht unter Microsoft-Betriebssystemen), sondern die Dateien, die demabc*.zip
Muster entsprechen. Sie möchten also tatsächlich:(Tatsächlich wäre unser
xargs
und derfor
obige Ansatz falsch, denn wenn es eine Datei gibt, dieabc*.zip
zum Beispiel aufgerufen wird ,unzip
würde sie als Muster behandelt!bsdtar
Weitere unixy Möglichkeiten zum Extrahieren vonzip
Archiven finden Sie hier.)Für eine Übereinstimmung ohne
[aA][bB][cC]*.[zZ][iI][pP]
Berücksichtigung der Groß- und Kleinschreibung würden Sie portabel verwenden. Einige Shells verfügen über erweiterte Globbing-Operatoren für die Anpassung der Groß- und Kleinschreibung:zsh
::Oder:
Wenn Sie nur möchten, dass das
abc
Teil nicht zwischen Groß- und Kleinschreibung unterscheidet.ksh93
::oder:
mit
bash
.(Keine andere Möglichkeit, nur Teile der Globs zwischen Groß- und Kleinschreibung zu unterscheiden, als die tragbare Syntax zu verwenden).
mit
yash
:gleiche Bemerkung wie
bash
oben.quelle
Dies schlägt jedoch fehl, wenn zu viele Dateien vorhanden sind (die Shell-Erweiterung ist hinsichtlich der Anzahl der Argumente, auf die sie erweitert werden kann, begrenzt).
Dies ist wahrscheinlich die universellste. Die Zitate müssen da sein. Bei einigen
find
Implementierungen können Sie auch-iname
anstelle der-name
Suche ohne Berücksichtigung der Groß- und Kleinschreibung verwenden (aBc<date>.ZIP
würde auch übereinstimmen).Mind the
.*
und\.
da die Filter grep regex Verwendungen ist , die aus der Wildcard - Notation der Schalen Verwendungen für Expansion unterscheiden. Verwenden Sie diese Optiongrep -i
für die Suche ohne Berücksichtigung der Groß- und Kleinschreibung.quelle
execve()
Systemaufruf.find
diese Dateien auch in Unterverzeichnissen gesucht werden. Verwenden Siefind . ! -name . -prune -name 'abc*.zip' -print
oder,find . -maxdepth 1 -name 'abc*.zip'
wenn Ihrefind
Unterstützung-maxdepth
auf GNU oder BSD gefällt oderfind . -depth 1 -name 'abc*.zip'
wenn Ihrefind
Unterstützung-depth <n>
auf einigen BSDs ähnlich ist, um sie auf das aktuelle Verzeichnis zu beschränken.$ ls ../*.a
arbeitete für mich (Listenarchive im übergeordneten Verzeichnis).Versuchen Sie
ls abc*.zip
, die Ergebnisse auf diejenigen einzugrenzen, die Ihren Kriterien für eine Startzeichenfolge von abc und eine Endung von .zip entsprechen. Das Sternchen wird erweitert, um diesen Ergebnissen zu entsprechen, ohne xvz-Startzeichen einzuschließen.quelle
Sie müssen das Verzeichnis angeben, in dem
ls
in einem Beispiel gesucht werden solles funktioniert für mich, aber offensichtlich unterstützt es nicht die Suche nach Mustern
quelle
abc
und mit enden.zip
.