FIND(1) — UNIX Programmer’s Manual
NAME
find − find files
SYNOPSIS
find pathname-list expression
DESCRIPTION
Find recursively descends the directory hierarchy for each pathname in the pathname-list (that is, one or more pathnames) seeking files that match a Boolean expression written in the primaries given below. Expressions are evaluated from left to right. In the descriptions, the argument n is used as a decimal integer where +n means more than n, -n, means less than n, and n means exactly n.
−fstype type
True if the filesystem to which the the file belongs is of type type, where type is typically 4.2 or nfs
−name filename
True if the filename argument matches the current filename. Normal shell argument syntax may be used if escaped (watch out for [, ? and ∗).
−perm onum
True if the file permission flags exactly match the octal number onum (see chmod(1)). If onum is prefixed by a minus sign, more flag bits (017777, see chmod(1)) become significant and the flags are compared: (flags&onum)==onum.
−pruneAlways returns true. Also prunes the search tree at the file. That is, if the current pathname is a directory, find does not descend into that directory.
−type cTrue where c has one of the following meanings:
bblock special file
ccharacter special file
ddirectory
fplain file
lsymbolic link
−links nTrue if the file has n links
−user uname
True if the file belongs to the user uname (login name or numeric user ID)
−group gname
True if the file belongs to group gname (group name or numeric group ID)
−size nTrue if the file is n blocks long (512 bytes per block)
−inum nTrue if the file has inode number n
−atime nTrue if the file has been accessed in n days
−mtime nTrue if the file has been modified in n days. ( n starts at zero. See examples below for more details of this switch.)
−exec command
True if the executed command returns a zero value as exit status. The end of the command must be punctuated by an escaped semicolon. A command argument {} is replaced by the current pathname.
−ok command
Like −exec except that the generated command is written on the standard output. The standard input is read and the command is executed only upon response y.
−printAlways true; the current pathname is printed.
−newer fileTrue if the current file has been modified more recently than the argument
−cpio fileWrite the current file on the argument file in cpio format. file
The primaries may be combined using the following operators (in order of decreasing precedence):
( ... )
A group of primaries and operators enclosed in parentheses. Parentheses are special to the shell and must be escaped. You must leave at least one space between the parentheses and the group of primaries and operators.
!primary
The negation of a primary (! is the unary not operator)
primary [−a] primary
Concatenation of primaries. The and operation is implied by the juxtaposition of two primaries, but can be explicitly specified with the −a operator.
primary −o primary
Alternation of primaries (−o is the or operator)
EXAMPLES
To recursively find all the filenames, starting from /usr/man/man2, that have been updated since the creation of the file TIMESTAMP, enter this command:
find /usr/man/man2 −newer /usr/man/man2/TIMESTAMP −print
To recursively print all filenames starting from the current directory, but skipping the directory SCCS, enter this command:
find . -name SCCS -prune -o -print
To recursively remove all files named a.out or ∗.o that have not been accessed for a week starting from the current directory, enter this command:
find . \( −name a.out −o −name ’∗.o’ \) −atime +7 −exec rm {} \;
To recursively display the names of all files named a.out and with permissions 640 starting from the current directory, enter this command:
find . \( −name a.out −a −perm 640 \) −print
or enter this command:
find . −name a.out −a −perm 640 −print
Note that −a is not necessary in either case. To display the names of all files modified greater than 24 hours ago, enter this command:
find . -mtime +0 -print
To display the names of all files modified between 0 and 24 hours ago, enter this command:
find . -mtime 0 -print
To display the names of all files modified greater than 48 hours ago, enter this command:
find . -mtime +1 -print
To display the names of all files modified between 24 and 48 hours ago, enter this command:
find . -mtime 1 -print
FILES
/etc/passwd
/etc/group
CAVEATS
The concept of universes is implemented (in part) by using conditional symbolic links, which are resolved as pointing one of two places, depending on the current universe of the user. Since conditional symbolic links are a special type of symbolic link, find treats conditional symbolic links as symbolic links and does not follow the link. This can cause confusion when you are using a command like this one, because /bin is a conditional symbolic link:
find /bin −print
Use this command to force the conditional symbolic link to be followed:
find /bin/ −print
In addition, any conditional symbolic links found within a directory heirarchy won’t be followed.
SEE ALSO
4BSD