NAME
find
—
walk a file hierarchy
SYNOPSIS
find |
[-dHhLXx ] [-f
path] path ...
[expression] |
DESCRIPTION
find
recursively descends the directory
tree for each path listed, evaluating an
expression (composed of the “primaries”
and “operators” listed below) in terms of each file in the
tree. In the absence of an expression, -print
is
assumed. If an expression is given, but none of the primaries
-delete
, -exec
,
-execdir
, -ls
,
-ok
, -print
, or
-print0
are specified, the given expression is
effectively replaced by (
given
expression )
-print
.
The options are as follows:
-d
- Causes
find
to visit directories in post-order i.e. all entries in a directory will be acted on before the directory itself. By default,find
visits directories in pre-order i.e. before their contents. -f
path- Specifies a file hierarchy for
find
to traverse. File hierarchies may be specified without the-f
option if they are given immediately after any other options. -H
- Causes the file information and file type (see stat(2)) returned for each symbolic link encountered on the command line to be those of the file referenced by the link, not the link itself. If the referenced file does not exist, the file information and type will be for the link itself. File information of all symbolic links not on the command line is that of the link itself.
-h
- An alias for the
-L
option. This option exists for backwards compatibility. -L
- Causes the file information and file type (see stat(2)) returned for each symbolic link to be those of the file referenced by the link, not the link itself. If the referenced file does not exist, the file information and type will be for the link itself.
-X
- Permit
find
to be safely used in conjunction with xargs(1). If a file name contains any of the delimiting characters used by xargs, a diagnostic message is displayed on standard error, and the file is skipped. The delimiting characters include single (‘'
’) and double (‘"
’) quotes, backslash (‘\
’), space, tab, and newline (‘\n’) characters. Consider using-print0
instead. -x
- Prevents
find
from descending into directories that have a device number different than that of the file from which the descent began.
It is not an error to specify more than one of the mutually
exclusive options -H
and -L
.
Where more than one of these options is specified, the last option given
overrides the others.
PRIMARIES
-amin
n- True if the difference between the file last access time and the time
find
was started, rounded up to the next full minute, is n minutes. -anewer
file- True if the current file has a more recent last access time than file.
-atime
n- True if the difference between the file last access time and the time
find
was started, rounded up to the next full 24-hour period, is n 24-hour periods. -cmin
n- True if the difference between the time of last change of file status
information and the time
find
was started, rounded up to the next full minute, is n minutes. -cnewer
file- True if the current file has a more recent last change time than file.
-ctime
n- True if the difference between the time of last change of file status
information and the time
find
was started, rounded up to the next full 24-hour period, is n 24-hour periods. -delete
- Delete found files and directories. Always returns true. This executes
from the current working directory as
find
recurses down the tree. It will not attempt to delete a filename with a ‘/’ character in its pathname relative to ‘.’ for security reasons. Depth-first traversal processing is implied by this option. The-delete
primary will fail to delete a directory if it is not empty. Following symlinks is incompatible with this option. -depth
- This primary always evaluates to true. The same as specifying the
-d
option. -empty
- True if the current file or directory is empty.
-exec
utility [argument ...] ;-exec
utility [argument ...] {} +- Execute the specified utility. Optional arguments
may be passed to the utility. The expression must be terminated by a
semicolon (‘
;
’) or a plus sign (‘+
’).If terminated by a semicolon, the utility is executed once per path. This form of the primary evaluates to true if utility exits with a zero exit status. If the string "{}" appears anywhere in the utility name or the arguments, it is replaced by the pathname of the current file.
If terminated by a plus sign, the pathnames for which the primary is evaluated are aggregated into sets, and utility will be invoked once per set, similar to xargs(1). This form of the primary always evaluates to true. If any invocation exits with a non-zero exit status, then
find
will eventually do so as well, but this does not causefind
to exit early. The string "{}" must appear, and must appear last. Each set is limited to no more than 5,000 pathnames, and is also limited such that the invocation of utility does not exceedARG_MAX
. -execdir
utility [argument ...] ;- Identical to the first form of the
-exec
primary with the exception that utility will be executed from the directory that holds the current file. The filename substituted for the string "{}" is not qualified. -flags
[-]flags- The flags are comma-separated symbolic file flags (see chflags(1) for a list of valid flag names). If the flags are preceded by a dash (‘-’), this primary evaluates to true if at least all specified flags are set in the file's flags. If the flags are not preceded by a dash, this primary evaluates to true if the flags specified exactly match those of the file.
-follow
- This primary always evaluates to true. The same as specifying the
-L
option. -fstype
type- True if the file is contained in a file system of type
type. Two special file system types are recognized:
“local” and “rdonly”. These do not describe
actual file system types; the former matches any file system physically
mounted on the system where
find
is being executed whereas the latter matches any file system which is mounted read-only. -group
gname- True if the file belongs to the group gname. If gname is numeric and there is no such group name, then gname is treated as a group ID.
-iname
pattern- Identical to the
-name
primary except that the matching is done in a case insensitive manner. -inum
n- True if the file has inode number n.
-links
n- True if the file has n links.
-ls
- This primary always evaluates to true. The following information for the current file is written to standard output: its inode number, size in 512-byte blocks, file permissions, number of hard links, owner, group, size in bytes, last modification time, and pathname. If the file is a block or character special file, the major and minor numbers will be displayed instead of the size in bytes. If the file is a symbolic link, the pathname of the linked-to file will be displayed preceded by “->”. The format is identical to that produced by “ls -dils”.
-maxdepth
n- True if the current search depth is less than or equal to what is specified in n.
-mindepth
n- True if the current search depth is at least what is specified in n.
-mmin
n- True if the difference between the file last modification time and the
time
find
was started, rounded up to the next full minute, is n minutes. -mtime
n- True if the difference between the file last modification time and the
time
find
was started, rounded up to the next full 24-hour period, is n 24-hour periods. -name
pattern- True if the last component of the pathname being examined matches pattern, which may use any of the special characters documented in glob(7).
-newer
file- True if the current file has a more recent last modification time than file.
-nogroup
- True if the file belongs to an unknown group.
-nouser
- True if the file belongs to an unknown user.
-ok
utility [argument ...] ;- Identical to the
-exec
primary with the exception thatfind
requests user affirmation for the execution of utility by printing a message to the terminal and reading a response. If the response is other than ‘y’, the command is not executed and the value of theok
expression is false. -path
pattern- True if the pathname being examined matches pattern,
which may use any of the special characters documented in
glob(7). Slashes (‘
/
’) are treated as normal characters and do not have to be matched explicitly. -perm
[-]mode- The mode may be either symbolic (see
chmod(1)) or an octal number. If the mode is symbolic, a starting
value of zero is assumed and the mode sets or clears permissions without
regard to the process's file mode creation mask. If the mode is octal,
only bits 07777 (
S_ISUID
|S_ISGID
|S_ISTXT
|S_IRWXU
|S_IRWXG
|S_IRWXO
) of the file's mode bits participate in the comparison. If the mode is preceded by a dash (‘-’), this primary evaluates to true if at least all of the bits in the mode are set in the file's mode bits. If the mode is not preceded by a dash, this primary evaluates to true if the bits in the mode exactly match the file's mode bits. Note, the first character of a symbolic mode may not be a dash. -print
- This primary always evaluates to true. It prints the pathname of the
current file to standard output, followed by a newline
(‘
\n
’) character. -print0
- This primary always evaluates to true. It prints the pathname of the
current file to standard output, followed by a null character, suitable
for use with the
-0
option to xargs(1). -prune
- This primary always evaluates to true. It causes
find
to not descend into the current file. Note, the-prune
primary has no effect if the-d
option was specified. -size
n[c
]- True if the file's size, rounded up, in 512-byte blocks is n. If n is followed by a ‘c’, then the primary is true if the file's size is n bytes.
-type
t- True if the file is of the specified type. Possible file types are as follows:
-user
uname- True if the file belongs to the user uname. If uname is numeric and there is no such user name, then uname is treated as a user ID.
-xdev
- This primary always evaluates to true. The same as specifying the
-x
option.
All primaries which take a numeric argument allow the number to be
preceded by a plus sign (‘+
’) or a
minus sign (‘-
’). A preceding plus
sign means “more than n”, a preceding minus sign means
“less than n”, and neither means “exactly n”.
Exceptions are the primaries mindepth
and
maxdepth
.
OPERATORS
The primaries may be combined using the following operators. The operators are listed in order of decreasing precedence.
(
expression)
- This evaluates to true if the parenthesized expression evaluates to true.
!
expression-not
expression- This is the unary NOT operator. It evaluates to true if the expression is false.
- expression
-a
expression - expression
-and
expression - expression expression
- The logical AND operator. As it is implied by the juxtaposition of two expressions, it does not have to be specified. The expression evaluates to true if both expressions are true. The second expression is not evaluated if the first expression is false.
- expression
-o
expression - expression
-or
expression - The logical OR operator. The expression evaluates to true if either the first or the second expression is true. The second expression is not evaluated if the first expression is true.
Operators, primaries, and arguments to primaries must be separate
arguments to find
, i.e. they should be separated by
whitespace.
EXIT STATUS
The find
utility exits with a value of 0
on successful traversal of all path operands or with a value >0 if an
error occurred.
EXAMPLES
Print out a list of all the files whose names end in “.c”:
$ find / -name '*.c'
Print out a list of all the files which are not both newer than “ttt” and owned by “wnj”:
$ find / ! \( -newer ttt -user wnj
\)
Print out a list of all core files on local file systems:
$ find / ! -fstype local -prune -o
-name '*.core'
Find all files in /usr/src ending in a dot and single digit, but skip directory /usr/src/gnu:
$ find /usr/src -path /usr/src/gnu
-prune -o -name \*.[0-9]
Find and remove all *.jpg and *.gif files under the current working directory:
$ find . \( -name \*.jpg -o -name
\*.gif \) -exec rm {} +
$ find . \( -name \*.jpg -o -name
\*.gif \) -delete
SEE ALSO
chflags(1), chmod(1), locate(1), ls(1), whereis(1), which(1), xargs(1), stat(2), fts_open(3), glob(7), symlink(7)
STANDARDS
The find
utility is compliant with the
IEEE Std 1003.1-2008 (“POSIX.1”)
specification.
The options [-dfhXx
], primaries
-amin
, -anewer
,
-cmin
, -cnewer
,
-delete
, -empty
,
-execdir
, -flags
,
-follow
, -fstype
,
-iname
, -inum
,
-ls
, -maxdepth
,
-mindepth
, -mmin
, and
-print0
, and operators -and
,
-not
, and -or
, are
extensions to that specification.
Historically, the -d
,
-L
, and -x
options were
implemented using the primaries -depth
,
-follow
, and -xdev
. These
primaries always evaluated to true. As they were really global variables
that took effect before the traversal began, some legal expressions could
have unexpected results. An example is the expression “-print -o
-depth”. As -print
always evaluates to true,
the standard order of evaluation implies that -depth
would never be evaluated. This is not the case.
Historic implementations of the -exec
and
-ok
primaries did not replace the string
"{}" in the utility name or the utility arguments if it had
preceding or following non-whitespace characters. This version replaces it
no matter where in the utility name or arguments it appears.
HISTORY
A simple find
command appeared in
Version 1 AT&T UNIX and was removed in
Version 3 AT&T UNIX. A new
find
command was written for the Programmer's
Workbench (PWB) and appeared in Version 5 AT&T
UNIX. It was rewritten for 4.3BSD-Reno.
CAVEATS
The special characters used by find
are
also special characters to many shell programs. In particular, the
characters ‘*
’,
‘[
’,
‘]
’,
‘?
’,
‘(
’,
‘)
’,
‘\
’, and
‘;
’ may have to be escaped from the
shell.
As file names may contain whitespace and shell metacharacters,
passing the output of find
to other programs
requires some care:
$ find . -name \*.jpg | xargs
rm
$ rm `find . -name
\*.jpg`
would, given files “important .jpg” and
“important”, remove “important”. Use the
-print0
or -exec
primaries
instead.
As there is no delimiter separating options and file names or file
names and the expression, it is difficult to specify
files named “-xdev” or ‘!’. These problems are
handled by the -f
option and the
getopt(3) ‘--’ construct.