Unix Find Command Notes and Examples
August 7, 2007 – 7:59 pmTip courtesy of Kyle Reynolds at http://www.camelrichard.org
find command notes and examples
——————————-
find <where-to-look> <criteria< <what-to-do>
There are 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:
\( -mtime +7 -o -atime +30 \)
You may specify “not” with an exclamation point. To match all files ending in .txt except the file
notme.txt, use:
\! -name notme.txt -name \*.txt
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:
-exec ls -l {} \;
EXAMPLES
=================================================================================
Search for file with a specific name in a set of files (-name)
find . -name filename.conf
find /usr -name filename.conf
How to apply a unix command to a set of file (-exec).
find . -name filename.conf -exec chmod 777 {} \;
How to search for a string in a selection of files (-exec grep …).
find . -name \*.conf -exec grep ftpd {} \;
find . -name “*.conf” -exec grep ftpd {} \;
^ note that wildcard must be slashed out or quoted so the shell doesn’t expand it first.
Redirect error messages produced by find to /dev/null
find / -name foo 2>/dev/null
find in directory list
find htdocs cgi-bin -name “*.cgi” -type f -exec chmod 755 {} \;
To report all files starting in the directories /mydir1 and /mydir2 larger
than 2000 blocks (about 1000KB) and that have not been accessed in over 30 days, enter:
find /mydir1 /mydir2 -size +2000 -atime +30
To remove (with prompting) all files starting in the /mydir directory that have
not been accessed in over 100 days, enter:
find /mydir -atime +100 -ok rm {} \;
To show a long listing starting in /mydir of 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 core starting in the directory
/prog that are larger than 500KB,
enter:
find /prog -type f -size +1000 -print -name core -exec rm {} \;