Searching
Locating Files With find
The find
command provides a wide range of capabilities for searching
through directory trees, including executing commands on found files, searching
for files based on creation and modification times, and more. It will search
any set of directories you specify for files that match the criteria. For
example, you might have thousands of files in your home
directory and be looking for a file named foo:
$ pwd
/home/jolo
$ find . -name foo
./foo
In the example above, the first argument ".
" indicates
for find
to start searching in the current directory (/home/jolo),
and the flag -name
with the argument foo
means to
search for a file named "foo". Find returns the relative path
of the file "foo" when it finds it in the file system.
In this case, the file was found right in the home directory.
You can also specify more than one location to search:
$ find /home/jolo/Project /home/jolo/Results/ . $HOME -name foo
This searches for the file name "foo" in the "/home/jolo/Project/", "/home/jolo/Results/", and the current directory.
Locating Files With locate
Another command provided on most Linux systems is the locate
command,
which builds a file-based database of files and their locations and will match
strings. locate
is usually faster than find
because it searches the database, rather than looking in each directory and
subdirectory. You can use locate myfile
in order to find where
the file is located. Try locate -h
for a full list of options.
Pattern Matching With grep
The grep
(global regular expression
print) command is another useful utility that searches the named
input file for lines that match the given pattern and prints those matching
lines. In the following example, grep
searches for instances of
the word "bar" in the file "foo":
$ cat foo
tool
bar
cats
dogs
$ grep bar foo
bar
If there are no matches, grep
will not print anything to the screen.