version 1.21, 1999/05/26 03:29:58 |
version 1.22, 1999/06/05 01:21:25 |
|
|
.Op Ar file ... |
.Op Ar file ... |
.Ar expression |
.Ar expression |
.Sh DESCRIPTION |
.Sh DESCRIPTION |
.Nm find |
.Nm |
recursively descends the directory tree for each |
recursively descends the directory tree for each |
.Ar file |
.Ar file |
listed, evaluating an |
listed, evaluating an |
.Ar expression |
.Ar expression |
(composed of the ``primaries'' and ``operands'' listed below) in terms |
(composed of the |
|
.Dq primaries |
|
and |
|
.Dq operands |
|
listed below) in terms |
of each file in the tree. |
of each file in the tree. |
.Pp |
.Pp |
The options are as follows: |
The options are as follows: |
.Bl -tag -width Ds |
.Bl -tag -width Ds |
.It Fl H |
.It Fl H |
Causes the file information and file type (see |
Causes the file information and file type (see |
.Xr stat 2 ) |
.Xr stat 2 ) |
returned for each symbolic link encountered on the command line to be |
returned for each symbolic link encountered on the command line to be |
those of the file referenced by the link, not the link itself. |
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 |
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 |
be for the link itself. File information of all symbolic links not on |
the command line is that of the link itself. |
the command line is that of the link itself. |
.It Fl d |
.It Fl d |
Causes |
Causes |
.Nm find |
.Nm |
to perform a depth\-first traversal, i.e. directories |
to perform a depth-first traversal, i.e., directories |
are visited in post\-order and all entries in a directory will be acted |
are visited in post-order and all entries in a directory will be acted |
on before the directory itself. |
on before the directory itself. |
By default, |
By default, |
.Nm find |
.Nm |
visits directories in pre\-order, i.e. before their contents. |
visits directories in pre-order, i.e., before their contents. |
Note, the default is |
Note, the default is |
.Ar not |
.Em not |
a breadth\-first traversal. |
a breadth-first traversal. |
.It Fl f Ar file |
.It Fl f Ar file |
Specifies a file hierarchy for |
Specifies a file hierarchy for |
.Nm find |
.Nm |
to traverse. |
to traverse. |
File hierarchies may also be specified as the operands immediately |
File hierarchies may also be specified as the operands immediately |
following the options. |
following the options. |
.It Fl h |
.It Fl h |
Causes the file information and file type (see |
Causes the file information and file type (see |
.Xr stat 2 ) , |
.Xr stat 2 ) |
returned for each symbolic link to be those of the file referenced by the |
returned for each symbolic link to be those of the file referenced by the |
link, not the link itself. |
link, not the link itself. |
If the referenced file does not exist, the file information and type will |
If the referenced file does not exist, the file information and type will |
|
|
.Xr xargs , |
.Xr xargs , |
a diagnostic message is displayed on standard error, and the file |
a diagnostic message is displayed on standard error, and the file |
is skipped. |
is skipped. |
The delimiting characters include single (``''') and double (``"'') |
The delimiting characters include single |
quotes, backslash (``\e''), space, tab and newline (``\en'') characters. |
.Pq Ql ' |
|
and double |
|
.Pq Ql \&" |
|
quotes, backslash |
|
.Pq Ql \e , |
|
space, tab, and newline |
|
.Pq Sq \en |
|
characters. |
As an alternative, the |
As an alternative, the |
.Fl print0 |
.Fl print0 |
function may be used safely in conjunction with the |
function may be used safely in conjunction with the |
|
|
.Xr xargs 1 . |
.Xr xargs 1 . |
.It Fl x |
.It Fl x |
Prevents |
Prevents |
.Nm |
.Nm |
from descending into directories that have a device number different |
from descending into directories that have a device number different |
than that of the file from which the descent began. |
than that of the file from which the descent began. |
.It Fl W |
.It Fl W |
|
|
.El |
.El |
.Sh PRIMARIES |
.Sh PRIMARIES |
.Bl -tag -width Ds |
.Bl -tag -width Ds |
.It Ic -amin Ar n |
.It Ic -amin Ar n |
True if the difference between the file last access time and the time |
True if the difference between the file last access time and the time |
.Nm find |
.Nm |
was started, rounded up to the next full minute, is |
was started, rounded up to the next full minute, is |
.Ar n |
.Ar n |
minutes. |
minutes. |
.It Ic -atime Ar n |
.It Ic -atime Ar n |
True if the difference between the file last access time and the time |
True if the difference between the file last access time and the time |
.Nm find |
.Nm |
was started, rounded up to the next full 24\-hour period, is |
was started, rounded up to the next full 24-hour period, is |
.Ar n |
.Ar n |
24\-hour periods. |
24-hour periods. |
.It Ic -cmin Ar n |
.It Ic -cmin Ar n |
True if the difference between the time of last change of file status |
True if the difference between the time of last change of file status |
information and the time |
information and the time |
.Nm find |
.Nm |
was started, rounded up to the next full minute, is |
was started, rounded up to the next full minute, is |
.Ar n |
.Ar n |
minutes. |
minutes. |
.It Ic -ctime Ar n |
.It Ic -ctime Ar n |
True if the difference between the time of last change of file status |
True if the difference between the time of last change of file status |
information and the time |
information and the time |
.Nm find |
.Nm |
was started, rounded up to the next full 24\-hour period, is |
was started, rounded up to the next full 24-hour period, is |
.Ar n |
.Ar n |
24\-hour periods. |
24-hour periods. |
.It Ic -empty |
.It Ic -empty |
True if the current file or directory is empty. |
True if the current file or directory is empty. |
.It Ic -exec Ar utility Op argument ... ; |
.It Ic -exec Ar utility Op argument ... ; |
True if the program named |
True if the program named |
.Ar utility |
.Ar utility |
returns a zero value as its exit status. |
returns a zero value as its exit status. |
Optional arguments may be passed to the utility. |
Optional arguments may be passed to the utility. |
The expression must be terminated by a semicolon (`;'). |
The expression must be terminated by a semicolon |
If the string ``{}'' appears anywhere in the utility name or the |
.Pq Ql \&; . |
|
If the string |
|
.Qq {} |
|
appears anywhere in the utility name or the |
arguments it is replaced by the pathname of the current file. |
arguments it is replaced by the pathname of the current file. |
.Ar utility |
.Ar utility |
will be executed from the directory from which |
will be executed from the directory from which |
.Nm find |
.Nm |
was executed. |
was executed. |
.It Ic -execdir Ar utility Op argument ... ; |
.It Ic -execdir Ar utility Op argument ... ; |
The |
Identical to the |
.Ic \&-execdir |
|
primary is identical to the |
|
.Ic -exec |
.Ic -exec |
primary with the exception that |
primary with the exception that |
.Ar utility |
.Ar utility |
will be executed from the directory that holds |
will be executed from the directory that holds |
the current file. The filename substituted for |
the current file. The filename substituted for |
the string ``{}'' is not qualified. |
the string |
|
.Qq {} |
|
is not qualified. |
.It Ic -follow |
.It Ic -follow |
Follow symbolic links. |
Follow symbolic links. |
.It Ic -fstype Ar type |
.It Ic -fstype Ar type |
True if the file is contained in a file system of type |
True if the file is contained in a file system of type |
.Ar type . |
.Ar type . |
Two special file system types are recognized: ``local'' and ``rdonly''. |
Two special file system types are recognized: |
|
.Dq local |
|
and |
|
.Dq rdonly . |
These do not describe actual file system types; |
These do not describe actual file system types; |
the former matches any file system physically mounted on the system where |
the former matches any file system physically mounted on the system where |
.Nm find |
.Nm |
is being executed, and the latter matches any file system which is |
is being executed whereas the latter matches any file system which is |
mounted read-only. |
mounted read-only. |
.It Ic -group Ar gname |
.It Ic -group Ar gname |
True if the file belongs to the group |
True if the file belongs to the group |
.Ar gname . |
.Ar gname . |
If |
If |
|
|
is numeric and there is no such group name, then |
is numeric and there is no such group name, then |
.Ar gname |
.Ar gname |
is treated as a group ID. |
is treated as a group ID. |
.It Ic -inum Ar n |
.It Ic -inum Ar n |
True if the file has inode number |
True if the file has inode number |
.Ar n . |
.Ar n . |
.It Ic -links Ar n |
.It Ic -links Ar n |
True if the file has |
True if the file has |
.Ar n |
.Ar n |
links. |
links. |
.It Ic -ls |
.It Ic -ls |
This primary always evaluates to true. |
This primary always evaluates to true. |
The following information for the current file is written to standard output: |
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 |
its inode number, size in 512-byte blocks, file permissions, number of hard |
links, owner, group, size in bytes, last modification time, and pathname. |
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 |
If the file is a block or character special file, the major and minor numbers |
will be displayed instead of the size in bytes. |
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 |
If the file is a symbolic link, the pathname of the linked-to file will be |
displayed preceded by ``\->''. |
displayed preceded by |
The format is identical to that produced by ``ls \-dgils''. |
.Dq \-> . |
|
The format is identical to that produced by |
|
.Dq ls \-dgils . |
.It Ic -maxdepth Ar n |
.It Ic -maxdepth Ar n |
True if the current search depth is less than or equal to what is specified in |
True if the current search depth is less than or equal to what is specified in |
.Ar n . |
.Ar n . |
.It Ic -mindepth Ar n |
.It Ic -mindepth Ar n |
True if the current search depth is at least what is specified in |
True if the current search depth is at least what is specified in |
.Ar n . |
.Ar n . |
.It Ic -mmin Ar n |
.It Ic -mmin Ar n |
True if the difference between the file last modification time and the time |
True if the difference between the file last modification time and the time |
.Nm find |
.Nm |
was started, rounded up to the next full minute, is |
was started, rounded up to the next full minute, is |
.Ar n |
.Ar n |
minutes. |
minutes. |
.It Ic -mtime Ar n |
.It Ic -mtime Ar n |
True if the difference between the file last modification time and the time |
True if the difference between the file last modification time and the time |
.Nm find |
.Nm |
was started, rounded up to the next full 24\-hour period, is |
was started, rounded up to the next full 24-hour period, is |
.Ar n |
.Ar n |
24\-hour periods. |
24-hour periods. |
.It Ic \&-ok Ar utility Ns Op argument ... ; |
.It Ic -name Ar pattern |
The |
|
.Ic \&-ok |
|
primary is identical to the |
|
.Ic -exec |
|
primary with the exception that |
|
.Nm find |
|
requests user affirmation for the execution of |
|
.Ar 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 |
|
.Ic \&ok |
|
expression is false. |
|
.It Ic -name Ar pattern |
|
True if the last component of the pathname being examined matches |
True if the last component of the pathname being examined matches |
.Ar pattern . |
.Ar pattern . |
Special shell pattern matching characters (``['', ``]'', ``*'', and ``?'') |
Special shell pattern matching characters |
|
.Pf ( Ql [ , |
|
.Ql \&] , |
|
.Ql * , |
|
and |
|
.Ql ? ) |
may be used as part of |
may be used as part of |
.Ar pattern . |
.Ar pattern . |
These characters may be matched explicitly by escaping them with a |
These characters may be matched explicitly by escaping them with a |
backslash (`\e'). |
backslash |
.It Ic -newer Ar file |
.Pq Ql \e . |
|
.It Ic -newer Ar file |
True if the current file has a more recent last modification time than |
True if the current file has a more recent last modification time than |
.Ar file . |
.Ar file . |
.It Ic -nouser |
.It Ic -nouser |
True if the file belongs to an unknown user. |
True if the file belongs to an unknown user. |
.It Ic -nogroup |
.It Ic -nogroup |
True if the file belongs to an unknown group. |
True if the file belongs to an unknown group. |
.It Ic -path Ar pattern |
.It Ic \&-ok Ar utility Op argument ... ; |
|
Identical to the |
|
.Ic -exec |
|
primary with the exception that |
|
.Nm |
|
requests user affirmation for the execution of |
|
.Ar utility |
|
by printing |
|
a message to the terminal and reading a response. |
|
If the response is other than |
|
.Sq y |
|
the command is not executed and the |
|
value of the |
|
.Ic \&ok |
|
expression is false. |
|
.It Ic -path Ar pattern |
True if the pathname being examined matches |
True if the pathname being examined matches |
.Ar pattern . |
.Ar pattern . |
Special shell pattern matching characters (``['', ``]'', ``*'', and ``?'') |
Special shell pattern matching characters |
|
.Pf ( Ql [ , |
|
.Ql \&] , |
|
.Ql * , |
|
and |
|
.Ql ? ) |
may be used as part of |
may be used as part of |
.Ar pattern . |
.Ar pattern . |
These characters may be matched explicitly by escaping them with a |
These characters may be matched explicitly by escaping them with a |
backslash (`\e'). |
backslash |
Slashes (`/') are treated as normal characters and do not have to be |
.Pq Ql \e . |
|
Slashes |
|
.Pq Ql / |
|
are treated as normal characters and do not have to be |
matched explicitly. |
matched explicitly. |
.It Xo |
.It Xo |
.Ic -perm |
.Ic -perm |
|
|
.Dv S_IRWXO ) |
.Dv S_IRWXO ) |
of the file's mode bits participate |
of the file's mode bits participate |
in the comparison. |
in the comparison. |
If the mode is preceded by a dash (``\-''), this primary evaluates to true |
If the mode is preceded by a dash |
|
.Pq Sq \- , |
|
this primary evaluates to true |
if at least all of the bits in the mode are set in the file's mode bits. |
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 |
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. |
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 (``\-''). |
Note, the first character of a symbolic mode may not be a dash. |
.It Ic -print |
.It Ic -print |
This primary always evaluates to true. |
This primary always evaluates to true. |
It prints the pathname of the current file to standard output, followed |
It prints the pathname of the current file to standard output, followed |
by a newline (``\en'') character. |
by a newline |
|
.Pq Ql \en |
|
character. |
If neither |
If neither |
.Ic -exec , |
.Ic -exec , |
.Ic -ls , |
.Ic -ls , |
|
|
nor |
nor |
.Ic -print0 |
.Ic -print0 |
is specified, the given expression shall be effectively replaced by |
is specified, the given expression shall be effectively replaced by |
.Cm \&( Ns Ar given\& expression Ns Cm \&) |
.Cm \&( Ns Ar given\& expression Ns Cm \&) |
.Ic -print . |
.Ic -print . |
.It Ic -print0 |
.It Ic -print0 |
This primary always evaluates to true. |
This primary always evaluates to true. |
|
|
.It Ic -prune |
.It Ic -prune |
This primary always evaluates to true. |
This primary always evaluates to true. |
It causes |
It causes |
.Nm find |
.Nm |
to not descend into the current file. |
to not descend into the current file. |
Note, the |
Note, the |
.Ic -prune |
.Ic -prune |
primary has no effect if the |
primary has no effect if the |
.Fl d |
.Fl d |
option was specified. |
option was specified. |
.It Ic -size Ar n Ns Op Cm c |
.It Ic -size Ar n Ns Op Cm c |
True if the file's size, rounded up, in 512\-byte blocks is |
True if the file's size, rounded up, in 512-byte blocks is |
.Ar n . |
.Ar n . |
If |
If |
.Ar n |
.Ar n |
is followed by a ``c'', then the primary is true if the |
is followed by a |
|
.Sq c , |
|
then the primary is true if the |
file's size is |
file's size is |
.Ar n |
.Ar n |
bytes. |
bytes. |
.It Ic -type Ar t |
.It Ic -type Ar t |
True if the file is of the specified type. |
True if the file is of the specified type. |
Possible file types are as follows: |
Possible file types are as follows: |
.Pp |
.Pp |
.Bl -tag -width flag -offset indent -compact |
.Bl -tag -width flag -offset indent -compact |
.It Cm W |
.It Cm W |
whiteout (currently, these won't even be visible without also specifying |
whiteout (currently, these won't even be visible without also specifying |
.Fl W ) |
.Fl W ) |
.It Cm b |
.It Cm b |
block special |
block special |
|
|
socket |
socket |
.El |
.El |
.Pp |
.Pp |
.It Ic -user Ar uname |
.It Ic -user Ar uname |
True if the file belongs to the user |
True if the file belongs to the user |
.Ar uname . |
.Ar uname . |
If |
If |
|
|
.El |
.El |
.Pp |
.Pp |
All primaries which take a numeric argument allow the number to be |
All primaries which take a numeric argument allow the number to be |
preceded by a plus sign (``+'') or a minus sign (``\-''). |
preceded by a plus sign |
A preceding plus sign means ``more than n'', a preceding minus sign means |
.Pq Ql + |
``less than n'', and neither means ``exactly n'' . |
or a minus sign |
|
.Pq Ql \- . |
|
A preceding plus sign means |
|
.Dq more than n , |
|
a preceding minus sign means |
|
.Dq less than n , |
|
and neither means |
|
.Dq exactly n . |
.Sh OPERATORS |
.Sh OPERATORS |
The primaries may be combined using the following operators. |
The primaries may be combined using the following operators. |
The operators are listed in order of decreasing precedence. |
The operators are listed in order of decreasing precedence. |
.Bl -tag -width (expression) |
.Bl -tag -width (expression) |
.It Cm \&( Ns Ar expression Ns Cm \&) |
.It Cm \&( Ns Ar expression Ns Cm \&) |
This evaluates to true if the parenthesized expression evaluates to |
This evaluates to true if the parenthesized expression evaluates to |
true. |
true. |
.Pp |
.Pp |
.It Cm \&! Ns Ar expression |
.It Cm \&! Ns Ar expression |
This is the unary |
This is the unary |
.Tn NOT |
.Tn NOT |
operator. |
operator. |
It evaluates to true if the expression is false. |
It evaluates to true if the expression is false. |
.Pp |
.Pp |
.It Ar expression Cm -and Ar expression |
.It Ar expression Cm -and Ar expression |
.It Ar expression expression |
.It Ar expression expression |
The |
The |
.Cm -and |
.Cm -and |
operator is the logical |
operator is the logical |
|
|
The expression evaluates to true if both expressions are true. |
The expression evaluates to true if both expressions are true. |
The second expression is not evaluated if the first expression is false. |
The second expression is not evaluated if the first expression is false. |
.Pp |
.Pp |
.It Ar expression Cm -or Ar expression |
.It Ar expression Cm -or Ar expression |
The |
The |
.Cm -or |
.Cm -or |
operator is the logical |
operator is the logical |
|
|
.El |
.El |
.Pp |
.Pp |
All operands and primaries must be separate arguments to |
All operands and primaries must be separate arguments to |
.Nm find . |
.Nm find . |
Primaries which themselves take arguments expect each argument |
Primaries which themselves take arguments expect each argument |
to be a separate argument to |
to be a separate argument to |
.Nm find . |
.Nm find . |
.Sh EXAMPLES |
.Sh EXAMPLES |
The following examples are shown as given to the shell: |
The following examples are shown as given to the shell: |
.Bl -tag -width findx |
.Bl -tag -width findx |
.It Li "find / \e! -name \*q*.c\*q -print" |
.It Li "find / \e! -name \*q*.c\*q -print" |
Print out a list of all the files whose names do not end in ``.c''. |
Print out a list of all the files whose names do not end in |
|
.Dq .c . |
.It Li "find / -newer ttt -user wnj -print" |
.It Li "find / -newer ttt -user wnj -print" |
Print out a list of all the files owned by user ``wnj'' that are newer |
Print out a list of all the files owned by user |
than the file ``ttt''. |
.Dq wnj |
|
that are newer |
|
than the file |
|
.Dq ttt . |
.It Li "find / \e! \e( -newer ttt -user wnj \e) -print" |
.It Li "find / \e! \e( -newer ttt -user wnj \e) -print" |
Print out a list of all the files which are not both newer than ``ttt'' |
Print out a list of all the files which are not both newer than |
and owned by ``wnj''. |
.Dq ttt |
|
and owned by |
|
.Dq wnj . |
.It Li "find / \e( -newer ttt -or -user wnj \e) -print" |
.It Li "find / \e( -newer ttt -or -user wnj \e) -print" |
Print out a list of all the files that are either owned by ``wnj'' or |
Print out a list of all the files that are either owned by |
that are newer than ``ttt''. |
.Dq wnj |
|
or |
|
that are newer than |
|
.Dq ttt . |
.El |
.El |
.Sh SEE ALSO |
.Sh SEE ALSO |
.Xr chmod 1 , |
.Xr chmod 1 , |
|
|
.Xr symlink 7 |
.Xr symlink 7 |
.Sh STANDARDS |
.Sh STANDARDS |
The |
The |
.Nm find |
.Nm |
utility syntax is a superset of the syntax specified by the |
utility syntax is a superset of the syntax specified by the |
.St -p1003.2 |
.St -p1003.2 |
standard. |
standard. |
|
|
These primaries always evaluated to true. |
These primaries always evaluated to true. |
As they were really global variables that took effect before the traversal |
As they were really global variables that took effect before the traversal |
began, some legal expressions could have unexpected results. |
began, some legal expressions could have unexpected results. |
An example is the expression ``\-print \-o \-depth''. |
An example is the expression |
As \-print always evaluates to true, the standard order of evaluation |
.Dq \-print \-o \-depth . |
implies that \-depth would never be evaluated. |
As |
|
.Cm \-print |
|
always evaluates to true, the standard order of evaluation |
|
implies that |
|
.Cm \-depth |
|
would never be evaluated. |
This is not the case. |
This is not the case. |
.Pp |
.Pp |
The operator ``-or'' was implemented as ``\-o'', and the operator ``-and'' |
The operator |
was implemented as ``\-a''. |
.Cm -or |
|
was implemented as |
|
.Cm \-o , |
|
and the operator |
|
.Cm -and |
|
was implemented as |
|
.Cm \-a . |
.Pp |
.Pp |
Historic implementations of the |
Historic implementations of the |
.Ic -exec |
.Ic -exec |
and |
and |
.Ic -ok |
.Ic -ok |
primaries did not replace the string ``{}'' in the utility name or the |
primaries did not replace the string |
|
.Qq {} |
|
in the utility name or the |
utility arguments if it had preceding or following non-whitespace characters. |
utility arguments if it had preceding or following non-whitespace characters. |
This version replaces it no matter where in the utility name or arguments |
This version replaces it no matter where in the utility name or arguments |
it appears. |
it appears. |
.Sh BUGS |
.Sh BUGS |
The special characters used by |
The special characters used by |
.Nm find |
.Nm |
are also special characters to many shell programs. |
are also special characters to many shell programs. |
In particular, the characters ``*'', ``['', ``]'', ``?'', ``('', ``)'', |
In particular, the characters |
``!'', ``\e'' and ``;'' may have to be escaped from the shell. |
.Ql * , |
|
.Ql [ , |
|
.Ql \&] , |
|
.Ql ? , |
|
.Ql ( , |
|
.Ql \&) , |
|
.Ql ! , |
|
.Ql \e , |
|
and |
|
.Ql \&; |
|
may have to be escaped from the shell. |
.Pp |
.Pp |
As there is no delimiter separating options and file names or file |
As there is no delimiter separating options and file names or file |
names and the |
names and the |
.Ar expression , |
.Ar expression , |
it is difficult to specify files named ``-xdev'' or ``!''. |
it is difficult to specify files named |
|
.Dq -xdev |
|
or |
|
.Dq ! . |
These problems are handled by the |
These problems are handled by the |
.Fl f |
.Fl f |
option and the |
option and the |
.Xr getopt 3 |
.Xr getopt 3 |
``--'' construct. |
.Dq \-\- |
|
construct. |
.Pp |
.Pp |
The |
The |
.Fl W |
.Fl W |
option is probably not the most elegant way to handle whiteouts, it may |
option is probably not the most elegant way to handle whiteouts. It may |
be replaced by a more sophisticated algorithm eventually. |
be replaced by a more sophisticated algorithm eventually. |