Назад | Перейти на главную страницу

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

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

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

ОБНОВИТЬ

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

Это не работает, потому что -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, как уже было продемонстрировано.