In Unix, what is the find command, and how do I use it to search through directories for files?
To use the find command, at the Unix prompt, enter:
Replace "pattern" with a filename or matching expression,
such as "*.txt" . (Leave the double quotes in.)
Options
The general form of the command is:
find (starting directory) (matching criteria and actions)The find command will begin looking in the starting directory
you specify and proceed to search through all accessible subdirectories.
You may specify more than one starting directory for searching.
You have several options for matching criteria:
-atime n |
File was accessed n days ago
|
-mtime n |
File was modified n days ago
|
-size n |
File is n blocks big (a block
is 512 bytes)
|
-type c |
Specifies file type: f=plain text, d=directory |
-fstype typ |
Specifies file system type: 4.2 or nfs |
-name nam |
The filename is nam
|
-user usr |
The file's owner is usr
|
-group grp |
The file's group owner is
grp
|
-perm p |
The file's access mode is p
(where p is an integer)
|
You can use + (plus) and
- (minus) modifiers with the
atime, mtime, and size criteria
to increase their usefulness, for example:
-mtime +7 |
Matches files modified more than seven days ago |
-atime -2 |
Matches files accessed less than two days ago |
| -size +100 | Matches files larger than 100 blocks (50KB) |
By default, multiple options are joined by "and". You may specify "or"
with the -o flag and the use of grouped
parentheses. To match all files modified more than 7 days ago and accessed
more than 30 days ago, use:
You may specify "not" with an exclamation point. To match all files
ending in .txt except the file notme.txt, use:
You can specify the following actions for the list of files that
the find command locates:
-print |
Display pathnames of matching files. |
-exec cmd |
Execute command cmd on a file.
|
-ok cmd |
Prompt before executing the command
cmd on a file.
|
-mount |
(System V) Restrict to file system of starting directory. |
-xdev |
(BSD) Restrict to file system of starting directory. |
-prune |
(BSD) Don't descend into subdirectories. |
Executed commands must end with \; (a
backslash and semi-colon) and may use {}
(curly braces) as a placeholder for each file that the find
command locates. For example, for a long listing of each file found, use:
Matching criteria and actions may appear in any order and are evaluated from left to right.
Full examples
- To find and report all C language source code files starting at the current directory, enter: find . -name \*.c -print
- To report all files starting in the directories
/mydir1and/mydir2larger than 2000 blocks (about 1000KB) and that have not been accessed in over 30 days, enter: find /mydir1 /mydir2 -size +2000 -atime +30 -print - To remove (with prompting) all files starting in the
/mydirdirectory that have not been accessed in over 100 days, enter: find /mydir -atime +100 -ok rm {} \; - To show a long listing starting in
/mydirof files not modified in over 20 days or not accessed in over 40 days, enter: find /mydir \(-mtime +20 -o -atime +40\) -exec ls -l {} \; - To list and remove all regular files named
corestarting in the directory/progthat are larger than 500KB, enter: find /prog -type f -size +1000 -print -name core -exec rm {} \; Note: On some systems, the name of the starting directory must end with a/(slash), or thefindcommand will return nothing. Thus, the starting directory in the previous example would be designated as/prog/, with a trailing slash. On other systems, a trailing slash does not affect the command. A trailing slash is never needed when searching in/(the root directory),.(the current directory), or..(the parent directory).
For more information, consult the Unix manual page by entering at the Unix prompt:
man findSome of the above information came from Essential System Administration, Aeleen Frisch (O'Reilly & Associates, Inc., 1991).
At Indiana University, to get support for personal or departmental Linux or Unix systems, see At IU, how do I get support for Linux or Unix?
Also see:
- In Unix, what does rc at the end of files like .newsrc mean?
- In Unix, how do I get a recursive directory listing?
- In Unix, how do I determine my current working directory?
- In Unix, how can I find the correct path to an executable file?
Last modified on August 22, 2008.






