Как использовать команду unix unix для поиска всех файлов cpp и h?
Я знаю, что для поиска всех .h файлов, которые мне нужно использовать:
find . -name "*.h"
но как найти все файлы .h AND .cpp?
Ответ 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).