как использовать команду unix "find", чтобы найти все файлы cpp и h? - PullRequest
25 голосов
/ 10 ноября 2008

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

Ответы [ 6 ]

39 голосов
/ 10 ноября 2008
find . -name \*.h -print -o -name \*.cpp -print

или

find . \( -name \*.h -o -name \*.cpp \) -print
11 голосов
/ 10 ноября 2008
find -name "*.h" -or -name "*.cpp"

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

6 голосов
/ 10 ноября 2008

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

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

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

ack "int\s+foo" --cpp 

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

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

5 голосов
/ 30 апреля 2015

Короткий, понятный способ сделать это с find:

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

со страницы руководства для -regex: «Это совпадение на всем пути, а не поиск». Отсюда необходимость префикса с .*, чтобы соответствовать началу пути ./dir1/dir2/... перед именем файла.

2 голосов
/ 07 августа 2014

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

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

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

2 голосов
/ 05 октября 2010
find . -regex ".*\.[cChH]\(pp\)?" -print

Это хорошо для меня в Cygwin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...