2008-10-01 7 views
27

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.

Antwort

25

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 
+4

BTW, ich musste opt EXTENDED_GLOB setzen, damit es funktioniert. –

+0

Was ist mit 'setopt no_CASE_GLOB'? – ksoo

10

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.

25

bash:

shopt -s nocaseglob 
+0

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. –

1

$ 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~ 
+0

** 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. –