Finden Sie Dateien mit bestimmten Erweiterungen

67

Wie kann ich findalle Dateien finden, die eine .xlsoder eine .csvErweiterung haben? Ich habe eine -regexOption gesehen, weiß aber nicht, wie ich sie verwenden soll.

Risto Salminen
quelle

Antworten:

115

Warum nicht einfach das benutzen:

find -name "*.xls" -o -name "*.csv"

Sie brauchen dafür keinen regulären Ausdruck.

Wenn Sie unbedingt Regex verwenden möchten, verwenden Sie einfach

find -regex ".*\.\(xls\|csv\)"
Joachim Sauer
quelle
8
Bessere Antwort als meine. +1.
Paul Tomblin
1
Warum wird vor der Klammer ein Backslash benötigt? Ich weiß, dass es ohne nicht funktioniert, aber es scheint so, als ob es sollte.
1
weil sie standardmäßig emacs reguläre Ausdrücke sind. Verwenden Sie -regextype, um dies zu ändern.
4
Nur zur Erinnerung: Ich kann mich nie erinnern, welche Tools "\ (" zum Gruppieren und welche "(" wollen. Ich muss es immer versuchen, um es zu wissen.
Joachim Sauer
1
Regex-Beispiel funktioniert nicht
Hostmaster
12
find . \( -name  \*.xls -o -name \*.csv \) -print
Paul Tomblin
quelle
Ich wusste nichts über die Option -o. Vielen Dank!
1
Braucht es Klammern? finden . '(' -name * .xls -o -name * .csv ')' - drucken
@ Adrian - nein, tut es nicht. Ich bin mir nicht sicher, ob es Parens für einen Nicht-GNU-Fund braucht, bei dem "-print" nicht bereits die Standardaktion war.
Paul Tomblin
5
Nun, GNU find (Standard unter Ubuntu 11.04) funktioniert korrekt mit Parens und -print ODER ohne (Parens und -print). Es werden jedoch find . -name \*.xls -o -name \*.csv -printnur Dateien
ausgegeben, die
Du hast recht, ich brauche die Eltern.
Paul Tomblin