Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to use the unix "find" command to find all the cpp and h files?

Tags:

find

unix

People also ask

What is the command for find in Unix?

$ find. Search for a file by the name abc. txt below the current directory, and prompt the user to delete each match. Note that the “{}” string is substituted by the actual file name while running and that the “\;” string is used to terminate the command to be executed.

Which find command will display all the files which?

find –perm option is used to find files based upon permissions. You can use find –perm 444 to get all files that allow read permission to the owner, group, and others.


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

or

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

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

(edited to protect the asterisks which were interpreted as formatting)


Paul Tomblin Has Already provided a terrific answer, but I thought I saw a pattern in what you were doing.

Chances are you'll be using find to generate a file list to process with grep one day, and for such task there exists a much more user friendly tool, Ack

Works on any system that supports perl, and searching through all C++ related files in a directory recursively for a given string is as simple as

ack "int\s+foo" --cpp 

"--cpp" by default matches .cpp .cc .cxx .m .hpp .hh .h .hxx files

(It also skips repository dirs by default so wont match on files that happen to look like files in them.)


A short, clear way to do it with find is:

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

From the man page for -regex: "This is a match on the whole path, not a search." Hence the need to prefix with .* to match the beginning of the path ./dir1/dir2/... before the filename.


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

This tested fine for me in cygwin.