Find

Aus Leupers.net-Wiki
Wechseln zu: Navigation, Suche

Suche nur in einem Verzeichnis

$ find /home/myDir -maxdepth 1


Suche mit Regular Expressions

find kann auch mit regulären Ausdrücken (RegEx) suchen. Dazu verwendet man statt "-name" bzw. "-iname" den Parameter "-regex" bzw. "-iregex"; mit Prefix "i" für case-insensitive Suche.

find unterstützt unterschiedliche RegEx-Varianten; standardmäßig die von emacs, welche z. T. eingeschränkt ist. Den Typ kann man über -regextype setzen.

Will man z. B. alle .h und .cc Dateien suchen kann man das mit regex so machen:

$ find -regextype posix-extended -regex '.*\.(h|cc)'

Alternativ ginge das konkrete Beispiel auch über eine ODER-Verknüpfung im find-Statement, aber manche Dinge lassen sich eben nur oder zumindest einfacher/eleganter über Regular Expression lösen:

$ find -name '*.h' -o -name '*.cc'

Es ist dabei zu beachten, dass man die beiden Oder-Statements klammern muss, falls man - wie im nachfolgenden Beispiel - weitere Statements anhängen möchte.
ACHTUNG:
Die Klammern müssen mit Backslash ("\") escaped werden, da sie sonst von der Bash interpretiert werden und nicht bei find ankommen.

$ find \( -name '*.h' -o -name '*.cc' \) -exec grep "MyClass" {} \;

Die Klammerung würde natürlich ebenso benötigt, wenn man zwei "-regex" Statements verODERet.

Quellen:


Interessante Links