Подтвердить что ты не робот

Как использовать команду unix unix для поиска всех файлов cpp и h?

Я знаю, что для поиска всех .h файлов, которые мне нужно использовать:

find . -name "*.h"

но как найти все файлы .h AND .cpp?

4b9b3361

Ответ 1

find . -name \*.h -print -o -name \*.cpp -print

или

find . \( -name \*.h -o -name \*.cpp \) -print

Ответ 2

find -name "*.h" -or -name "*.cpp"

(отредактирован для защиты звездочек, которые были интерпретированы как форматирование)

Ответ 3

Пол Томблин Уже дал потрясающий ответ, но я думал, что видел образец в том, что вы делали.

Скорее всего, вы будете использовать find для создания списка файлов для обработки с помощью grep в один прекрасный день, и для такой задачи существует гораздо более удобный инструмент, Ack

Работает в любой системе, поддерживающей perl, и поиск по всем связанным с С++ файлам в каталоге, рекурсивным для данной строки, так же просто, как

ack "int\s+foo" --cpp 

"--cpp" по умолчанию соответствует .cpp .cc .cxx .m .hpp .hh .h .hxx файлам

(Он также пропускает хранилища репозитория по умолчанию, поэтому не согласуется с файлами, которые выглядят как файлы в них.)

Ответ 4

Короткий, четкий способ сделать это с помощью find:

find . -regex '.*\.\(cpp\|h\)'

На странице man для -regex: "Это совпадение по всему пути, а не по поиску". Следовательно, необходимо префикс с .* для соответствия началу пути ./dir1/dir2/... перед именем файла.

Ответ 5

find . -regex ".*\.[cChH]\(pp\)?" -print

Это проверено отлично для меня в cygwin.

Ответ 6

Вы можете использовать find в этой короткой форме:

find \( -name '*.cpp' -o -name '*.h' \) -print

-print можно опустить. Использование -o только между выражениями особенно полезно, когда вы хотите найти несколько типов файлов и выполнять одно и то же задание (скажем, вычисление md5sum).