| FIND(1) | General Commands Manual | FIND(1) |
find — walk a file
hierarchy
find |
[-dHhLXx] [-f
path] path ...
[expression] |
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:
-dfind 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
pathfind to traverse.
File hierarchies may be specified without the -f
option if they are given immediately after any other options.-H-h-L option. This option exists for
backwards compatibility.-L-Xfind 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.-xfind 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.
-amin
nfind was started, rounded up to the next full
minute, is n minutes.
-anewer
file-atime
nfind was started, rounded up to the next full
24-hour period, is n 24-hour periods.
-cmin
nfind was started, rounded
up to the next full minute, is n minutes.
-cnewer
file-ctime
nfind was started, rounded
up to the next full 24-hour period, is n 24-hour
periods.
-deletefind
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-d option.
-empty-exec
utility [argument ...] ;-exec
utility [argument ...] {} +;’) 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 cause find 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
exceed ARG_MAX.
-execdir
utility [argument ...] ;-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-follow-L option.
-fstype
typefind is being executed
whereas the latter matches any file system which is mounted read-only.
-group
gname-iname
pattern-name primary except that the
matching is done in a case insensitive manner.
-inum
n-links
n-ls-maxdepth
n-mindepth
n-mmin
nfind was started, rounded up to the next full
minute, is n minutes.
-mtime
nfind was started, rounded up to the next full
24-hour period, is n 24-hour periods.
-name
pattern-newer
file-nogroup-nouser-ok
utility [argument ...] ;-exec primary with the exception
that find 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 the
ok expression is false.
-path
pattern/’) are treated as normal
characters and do not have to be matched explicitly.
-perm
[-]modeS_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\n’) character.
-print0-0 option to
xargs(1).
-prunefind to not descend into the current file. Note,
the -prune primary has no effect if the
-d option was specified.
-size
n[c]-type
t-user
uname-xdev-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.
The primaries may be combined using the following operators. The operators are listed in order of decreasing precedence.
(
expression )!
expression-not
expression-a
expression-and
expression-o
expression-or
expressionOperators, primaries, and arguments to primaries must be separate
arguments to find, i.e. they should be separated by
whitespace.
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.
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 \) -deletechflags(1), chmod(1), locate(1), ls(1), whereis(1), which(1), xargs(1), stat(2), fts_open(3), glob(7), symlink(7)
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.
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.
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.
| March 31, 2022 | openbsd |