Как найти.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, как уже продемонстрировано.