как использовать команду unix «find», чтобы найти все файлы cpp и h?
Вопрос
Я знаю, что для поиска всех файлов 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).