FIND(1)

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.

-prune
    Always 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 c
    True where c has one of the following meanings:

    b   block special file

    c   character special file

    d   directory

    f   plain file

    l   symbolic link

-links n
    True 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 n
    True if the file is n blocks long (512 bytes per block)

-inum n
    True if the file has inode number n

-atime n
    True if the file has been accessed in n days

-mtime n
    True 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.

-print
    Always true; the current pathname is printed.

-newer file
    True if the current file has been modified more recently than the argument

-cpio  file
    Write 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
sh(1), test(1)