Найти файлы с определенными расширениями

67

Как я могу использовать, findчтобы найти все файлы, которые имеют .xlsили имеют .csvрасширение? Я видел -regexвариант, но я не знаю, как его использовать.

Ристо Салминен
источник

Ответы:

115

Почему бы просто не использовать это:

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

Вам не нужно регулярное выражение для этого.

Если вы абсолютно хотите использовать регулярные выражения, просто используйте

find -regex ".*\.\(xls\|csv\)"
Йоахим Зауэр
источник
8
Лучше ответ, чем мой. +1.
Пол Томблин
1
Почему перед скобкой нужен обратный слеш? Я знаю, что это не работает без этого, но кажется, что так и должно
1
потому что они являются регулярными выражениями emacs по умолчанию. используйте -regextype, чтобы изменить это.
4
Просто для справки: я никогда не могу вспомнить, какие инструменты хотят "\ (" для группировки, а какие хотят "(". Я всегда должен пытаться это знать, чтобы узнать это.
Йоахим Зауэр
1
Пример регулярного выражения не работает
хозяин
12
find . \( -name  \*.xls -o -name \*.csv \) -print
Пол Томблин
источник
Не знал о опции -o. Спасибо!
1
Нужны ли скобки? находить . '(' -name * .xls -o -name * .csv ')' - печать
@ Адриан - нет, это не так. Я не уверен, понадобятся ли ему парены при поиске без GNU, где «-print» уже не было действием по умолчанию.
Пол Томблин
5
Ну, GNU find (по умолчанию в ubuntu 11.04) работает правильно как с паренами, так и с -print ИЛИ без (паренсов и -print). Но find . -name \*.xls -o -name \*.csv -printвыводит только файлы, соответствующие .csv,
bbaja42
Ты прав, мне нужны парены.
Пол Томблин