Ich muss alle Dateien auflisten, deren Namen mit 'SomeLongString' beginnen. Aber der Fall von "SomeLongString" kann variieren. Wie?Case-insensitive Glob on zsh/bash
Ich benutze zsh, aber eine Bash-Lösung ist auch willkommen.
Ich muss alle Dateien auflisten, deren Namen mit 'SomeLongString' beginnen. Aber der Fall von "SomeLongString" kann variieren. Wie?Case-insensitive Glob on zsh/bash
Ich benutze zsh, aber eine Bash-Lösung ist auch willkommen.
ZSH:
$ unsetopt CASE_GLOB
Oder, wenn Sie nicht Groß- und Kleinschreibung Globbing im Allgemeinen ermöglichen wollen, können Sie es aktivieren nur für die unterschiedlichen Teil:
$ print -l (#i)(somelongstring)*
Dies wird jede Datei übereinstimmen, die mit „somelongstring“ beginnt (in einer beliebigen Kombination von Groß-/Kleinschreibung). Das Groß-/Kleinschreibung-Flag gilt für alles zwischen den Klammern und kann mehrfach verwendet werden. Lesen Sie das Handbuch zshexpn(1)
für weitere Informationen.
setopt extendedglob
Je nachdem, wie tief wollen Sie diese Auflistung haben, bietet find
ziemlich viel in dieser Hinsicht:
find . -iname 'SomeLongString*' -maxdepth 1
Dies wird Ihnen nur die Dateien geben im aktuellen Verzeichnis. Wichtig ist hier der -iname
Parameter anstelle von -name
.
bash:
shopt -s nocaseglob
Dank: extendend ermöglichen Globbing für diese Arbeit
UPDATE Fast vergessen, die Sie haben. Ich hatte gehofft, dass es einen Weg gibt, es als Teil des Globs selbst zu spezifizieren. Das Zsh-Handbuch erwähnt etwas ähnliches, aber ich konnte es nicht herausfinden. –
$ function i() {
> shopt -s nocaseglob; $*; shopt -u nocaseglob
> }
$ ls *jtweet*
ls: cannot access *jtweet*: No such file or directory
$ i ls *jtweet*
JTweet.pm JTweet.pm~ JTweet2.pm JTweet2.pm~
** Sie müssen den Glob zitieren, um es sicher an die Funktion zu übergeben **. Wenn '* jtweet *' mit irgendetwas übereinstimmt, wird es erweitert, bevor die Funktion es sieht. (Oder ein Fehler oder eine leere Zeichenfolge, abhängig von anderen Einstellungen). Interessante Idee. Ich denke, es wird meistens funktionieren, wenn Sie 'i ls '* jtweet *'' ausführen, selbst wenn es auch eine 'jtweet.pm 'im Verzeichnis gibt. Es gibt jedoch viele potentielle Probleme mit Leerzeichen oder anderen Sonderzeichen in Nicht-Glob-Argumenten oder im Glob. –
BTW, ich musste opt EXTENDED_GLOB setzen, damit es funktioniert. –
Was ist mit 'setopt no_CASE_GLOB'? – ksoo