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


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

Ты прав, мне нужны парены.
Пол Томблин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.