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