However I know for sure that the -o construction for finding different kinds of files is correct:
find ./ -name "*.cpp" -or -name "*.h"
Verdadeiro, mas a precedência de -or
não é tão alta. De man find
:
Please note that -a when specified implicitly (for example by two tests
appearing without an explicit operator between them) or explicitly has
higher precedence than -o. This means that find . -name afile -o -name
bfile -print will never print afile.
Então:
-name "*.cpp" -or -name "*.h" -exec grep ...
é como:
-name "*.cpp" -or ( -name "*.h" -exec grep ... )
e não como:
( -name "*.cpp" -or -name "*.h" ) -exec grep ...
Você precisa:
find . \( -name '*.cpp' -o -name '*.h' \) -exec grep -H '#include.*Sample\.h' {} +
(Eu suponho que você usou /dev/null
para fazer grep
imprimir o nome do arquivo? A opção -H
faz isso.)