Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

are there any commands to search your Mac using terminal? I tried usin grep to search but it seems somewhat unresponsive and nothing comes up.

For example, I would type "grep Files" (A folder name) and it just prints a blank line and nothing happens.

share|improve this question
    
possible duplicate of Search through text files in Mac OS X –  Chealion Aug 18 '10 at 15:18
    
I'm interested in searching through all types of files; Not necessarily excluding text files but not only text files. –  JFW Aug 19 '10 at 3:44
add comment

4 Answers

up vote 12 down vote accepted

You can also use the mdfind command in order to perform a search with Spotlight. More info here.

Use mdfind -name searchterm in order to retrieve files with the name searchterm. Use mdfind searchterm to perform a search on file name and content.

share|improve this answer
add comment

If you just want to find files with a certain name, use find

The man page can be found HERE or by typing man find at the terminal prompt.

Basically, find will recursively look for a file meeting criteria you specify. The easiest example:

find . -name file_name -print

That will search for a file named "file_name" starting in the current directory and searching below and print the files with that name.

find ~ -name ".DS_Store" -delete

That will find all the .DS_Store files and delete them.

You can search by name, regex, date. You can act on the file in any Unix way with the -exec predicate.

You can also use find as the start of a more complex pipeline of actions. Example:

find . -type f -print | egrep -i '\.m4a$|\.mp3$'

Will find all the files with extensions .m4a or .mp3

find . -type f -print | egrep -i '\.m4a$|\.mp3$' | wc -l

Will give you a count of those files.

share|improve this answer
    
If -print is the only predicate, it can be omitted; also, there's simple globbing available. Thus finding all of the .txt files under a directory foo would be done with find foo -name \\*.txt –  Norman Gray Aug 18 '10 at 17:35
    
@yoshi: That is absolutely false. Typing find . IS recursive from the cwd. Try typing find . in your root directory! –  drewk Dec 1 '12 at 2:49
    
My bad could swear it wasn't recursive but maybe server has chocked -shrug- –  yoshi Dec 7 '12 at 10:49
add comment

grep expects both a pattern and a filespec. If one is missing then it uses what is passed as the pattern, and waits for the data to search via standard input.

If you want to use a more complex filespec then use find.

find ~ -name '*.txt' -exec grep -q 'secret' {} \; -print
share|improve this answer
    
I just basically want it to find files that have the name that I enter into the command. –  JFW Aug 18 '10 at 12:11
    
In that case you don't need to use the -exec predicate in find. –  Ignacio Vazquez-Abrams Aug 18 '10 at 12:13
add comment

If you want to search through a whole folder, just use -r on grep:

grep -r pattern folder/to/search

With find, you can also use xargs:

find folder/to/search -name '*.txt' | xargs grep pattern

or to make sure that you search two files at a time and therefore have the filenames specified:

find folder/to/search -name '*.txt' | xargs grep -n2 pattern
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.