2008-11-10 7 views
20

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

+0

Возможный дубликат [Unix find: несколько типов файлов] (https://stackoverflow.com/questions/7190565/unix-find-multiple-file-types) – 2018-01-02 14:33:20

ответ

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

или

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

Что-то изменилось с помощью `find` в последние пару лет? Я не могу заставить это работать в Ubuntu 9.10 или OS X 10.6. Он находит файлы `.cpp`, но не файлы` .h`. Пример: https://gist.github.com/783687 – Nate 2011-01-17 23:21:39

+1

Попробуйте `find. -name \ *. h -print -o -name \ *. cpp -print` – 2011-01-17 23:37:29

+0

Это работает. Благодарю. – Nate 2011-01-19 07:53:08

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

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

6

Paul Tomblin уже обеспечил потрясающий ответ, но я думал, что я увидел картину в что вы делали.

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

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

ack "int\s+foo" --cpp 

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

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

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

В этом случае тестируется хорошо для меня в Cygwin.

2

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

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

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

2

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

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

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