Znajdź pliki z określonymi rozszerzeniami

67

Jak mogę findznaleźć wszystkie pliki, które mają rozszerzenie .xlslub .csvrozszerzenie? Widziałem -regexopcję, ale nie wiem, jak jej użyć.

Risto Salminen
źródło

Odpowiedzi:

115

Dlaczego nie skorzystać z tego:

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

Nie potrzebujesz do tego wyrażenia regularnego.

Jeśli absolutnie chcesz użyć wyrażenia regularnego, po prostu użyj

find -regex ".*\.\(xls\|csv\)"
Joachim Sauer
źródło
8
Lepsza odpowiedź niż moja. +1.
Paul Tomblin,
1
Dlaczego ukośnik jest potrzebny przed nawiasiem? Wiem, że bez niego to nie działa, ale wydaje się, że powinno.
1
ponieważ domyślnie są to wyrażenia regularne emacs. użyj -regextype, aby to zmienić.
4
Dla przypomnienia: nigdy nie pamiętam, które narzędzia chcą „\ (” do grupowania, a które chcą ”(„. Zawsze muszę to wypróbować, aby to wiedzieć.
Joachim Sauer,
1
Przykład wyrażenia regularnego nie działa
hostmaster
12
find . \( -name  \*.xls -o -name \*.csv \) -print
Paul Tomblin
źródło
Nie wiedziałem o opcji -o. Dzięki!
1
Czy potrzebuje nawiasów? odnaleźć . '(' -name * .xls -o -name * .csv ')' - druk
@Adrian - nie, nie ma. Nie jestem pewien, czy potrzebowałby parens na znalezieniu innym niż GNU, gdzie „-print” nie było już domyślną czynnością.
Paul Tomblin,
5
Cóż, GNU find (domyślnie w Ubuntu 11.04) działa poprawnie zarówno z parens, jak i -print OR bez (parens i -print). Ale find . -name \*.xls -o -name \*.csv -printwyświetla tylko pliki pasujące do pliku .csv,
bbaja42,
Masz rację, potrzebuję parens.
Paul Tomblin