Как найти.h,.c и.cc файлы в текущем каталоге в Linux?

find . -name "*.[hc]|*.cc"

Выше не работает, почему?

ОБНОВИТЬ

Как мне найти эти 3 вида файлов с одним шаблоном?

2 ответа

Решение

Это не работает, потому что -name ожидает шаблон оболочки. Ты можешь использовать -regex вместо этого, или просто соберите свой шаблон так:

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

редактировать
Для этого с одним шаблоном вам понадобится регулярное выражение:

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

Вы можете сделать это с помощью регулярных выражений emacs по умолчанию, я уверен; Я не использую их или не знаю основных отличий, поэтому выбрал ту, которую знаю.

Если вы действительно хотите использовать один shellglob, вам не повезло: единственный синтаксис для нескольких строк {a,b}и это не поддерживается find, Но в моем первом примере нет ничего плохого в том, что касается построения / цепочки команд. Это шоу find предназначен для использования.

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

 find -regex "\(.*\.[hc]\|.*\.cc\)"

следует сделать свое дело, но более нормальный способ сделать это - использовать -o, как уже продемонстрировано.

Другие вопросы по тегам