как использовать команду unix «find», чтобы найти все файлы cpp и h?

StackOverflow https://stackoverflow.com/questions/277999

  •  07-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

или

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

Другие советы

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

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

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

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

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

ack "int\s+foo" --cpp 

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top