From 09863a10639de265b2299938a292bba15abc570a Mon Sep 17 00:00:00 2001 From: Kiyoshi Aman Date: Sun, 2 Jun 2019 05:39:48 -0500 Subject: usr.bin/find: replace with heirloom find --- usr.bin/find/find.1 | 1488 +++++++++++++++++++-------------------------------- 1 file changed, 536 insertions(+), 952 deletions(-) (limited to 'usr.bin/find/find.1') diff --git a/usr.bin/find/find.1 b/usr.bin/find/find.1 index 60ce94a..a12b404 100644 --- a/usr.bin/find/find.1 +++ b/usr.bin/find/find.1 @@ -1,974 +1,558 @@ -.\" $NetBSD: find.1,v 1.89 2017/07/03 21:34:57 wiz Exp $ -.\" -.\" Copyright (c) 1990, 1993 -.\" The Regents of the University of California. All rights reserved. -.\" -.\" This code is derived from software contributed to Berkeley by -.\" the Institute of Electrical and Electronics Engineers, Inc. +'\" t +.\" Sccsid @(#)find.1 1.44 (gritter) 8/14/05 +.\" Parts taken from find(1), Unix 7th edition: +.\" Copyright(C) Caldera International Inc. 2001-2002. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright +.\" Redistributions of source code and documentation must retain the +.\" above copyright notice, this list of conditions and the following +.\" disclaimer. +.\" Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. -.\" 3. Neither the name of the University nor the names of its contributors -.\" may be used to endorse or promote products derived from this software -.\" without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. +.\" All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed or owned by Caldera +.\" International, Inc. +.\" Neither the name of Caldera International, Inc. nor the names of +.\" other contributors may be used to endorse or promote products +.\" derived from this software without specific prior written permission. .\" -.\" from: @(#)find.1 8.7 (Berkeley) 5/9/95 +.\" USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA +.\" INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE +.\" LIABLE FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +.\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +.\" OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +.\" EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd June 13, 2016 -.Dt FIND 1 -.Os -.Sh NAME -.Nm find -.Nd walk a file hierarchy -.Sh SYNOPSIS -.Nm -.Op Fl H | Fl L | Fl P -.Op Fl dEhsXx -.Ar file -.Op Ar file ... -.Op Ar expression -.Nm -.Op Fl H | Fl L | Fl P -.Op Fl dEhsXx -.Fl f Ar file -.Op Ar file ... -.Op Ar expression -.Sh DESCRIPTION -.Nm -recursively descends the directory tree for each -.Ar file -listed, evaluating an -.Ar expression -(composed of the -.Dq primaries +.TH FIND 1 "8/14/05" "Heirloom Toolchest" "User Commands" +.SH NAME +find \- find files +.SH SYNOPSIS +.B find +.I pathname-list expression +.SH DESCRIPTION +.I Find +recursively descends +the directory hierarchy for +each pathname in the +.I pathname-list +(i.\|e., one or more pathnames) +seeking files that match a boolean +.I expression +written in the primaries given below. +In the descriptions, the argument +.I n +is used as a decimal integer +where +.I +n +means more than +.I n, +.I \-n +means less than +.I n and -.Dq operands -listed below) in terms -of each file in the tree. -.Pp -The options are as follows: -.Bl -tag -width Ds -.It Fl H -Causes the file information and file type (see -.Xr 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. -.It Fl L -Causes the file information and file type (see -.Xr 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. -.It Fl P -Causes the file information and file type (see -.Xr stat 2 ) -returned for each symbolic link to be those of the link itself. -.It Fl d -Causes -.Nm -to perform a depth-first traversal, i.e., directories -are visited in post-order, and all entries in a directory will be acted -on before the directory itself. -By default, -.Nm -visits directories in pre-order, i.e., before their contents. -Note, the default is -.Em not -a breadth-first traversal. -.It Fl E -Causes -.Ar regexp -arguments to primaries to be interpreted as extended regular -expressions (see -.Xr re_format 7 ) . -.It Fl f -Specifies a file hierarchy for -.Nm -to traverse. -File hierarchies may also be specified as the operands immediately -following the options. -.It Fl h -Causes the file information and file type (see -.Xr 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. -.It Fl s -Causes the entries of each directory to be sorted in -lexicographical order. -Note that the sorting is done only inside of each directory; -files in different directories are not sorted. -Therefore, -.Sq Li a/b -appears before -.Sq Li a.b , -which is different from -.Dq Li "find ... \&| sort" -order. -.It Fl X -Modifies the output to permit -.Nm -to be safely used in conjunction with -.Xr xargs 1 . -If a file name contains any of the delimiting characters used by -.Xr xargs 1 , -a diagnostic message is displayed on standard error, and the file -is skipped. -The delimiting characters include single -.Pq Dq \&' -and double -.Pq Dq \&" -quotes, backslash -.Pq Dq \e , -space, tab, and newline characters. -Alternatively, the -.Ic -print0 -or -.Ic -printx -primaries can be used to format the output in a way that -.Xr xargs 1 -can accept. -.It Fl x -Restricts the search to the file system containing the -directory specified. -Does not list mount points to other file systems. -.El -.Sh PRIMARIES -All primaries which take a numeric argument of -.Ar n -allow the number to be preceded by a plus sign -.Pq Dq \&+ -or a minus sign -.Pq Dq \- . -A preceding plus sign means -.Dq more than Ar n , -a preceding minus sign means -.Dq less than Ar n , -and neither means -.Dq exactly Ar n . -(The argument specified for the -.Ic -user +.I n +means exactly +.IR n . +.TP 10n +.BR \-name " filename" +True if the +.I filename +argument matches the current file name. +Normal +Shell +argument syntax +as described in +.IR glob (7) +may be used if escaped (watch out for +`[', `?' and `*'). +The internationalization constructs +`[[:class:]]', `[[=e=]]', and `[[.cs.]]' +are understood with +.BR /usr/5bin/s42/find , +.BR /usr/5bin/posix/find , and -.Ic -group -primaries -are similarly treated if the value is numeric and does not correspond to a -valid user or group name.) -.Pp -For primaries which take a -.Ar timestamp -argument, the argument must be valid input to -.Xr parsedate 3 . -If the argument contains multiple words, enclose the argument in quotes. -.Pp -.Bl -tag -width Ds -compact -.It Ic -amin Ar n -True if the difference between the file last access time and the time -.Nm -was started, rounded up to the next full minute, is -.Ar n -minutes. -.Pp -.It Ic -anewer Ar file -True if the current file has a more recent last access time than -.Ar file . -.Pp -.It Ic -asince Ar timestamp -True if the file last access time is greater than the specified -.Ar timestamp . -.Pp -.It Ic -atime Ar n -True if the difference between the file last access time and the time -.Nm -was started, rounded up to the next full 24-hour period, is -.Ar n -24-hour periods. -.Pp -.It Ic -cmin Ar n -True if the difference between the time of last change of file status -information and the time -.Nm -was started, rounded up to the next full minute, is -.Ar n -minutes. -.Pp -.It Ic -cnewer Ar file -True if the current file has a more recent last change time than -.Ar file . -.Pp -.It Ic -csince Ar timestamp -True if the file last status change time is greater than the specified -.Ar timestamp . -.Pp -.It Ic -ctime Ar n -True if the difference between the time of last change of file status -information and the time -.Nm -was started, rounded up to the next full 24-hour period, is -.Ar n -24-hour periods. -.Pp -.It Ic -delete -Delete found files, symbolic links, and directories. -Always returns true. -This executes from the current working directory as -.Nm -recurses down the tree. -To avoid deleting unexpected files, it will ignore any filenames that -.Xr fts 3 -returns that contain a -.Dq / -.Xr ( fts 3 -should not return such pathnames). -Depth-first traversal processing is implied by this option. -This primary can also be invoked as -.Ic -rm . -.Pp -.It Ic -empty -True if the current file or directory is empty. -.Pp -.It Ic -exec Ar utility Oo argument ... Oc Ic \&; -.It Ic -exec Ar utility Oo argument ... Oc Ic {} Ic \&+ -Execute the specified -.Ar utility -with the specified arguments. -.Pp -The list of arguments for -.Ar utility -is terminated by a lone semicolon -.Dq Ic \&; -or plus -.Dq Ic \&+ -character as a separate parameter. -The command specified by -.Ar utility -will be executed with its current working directory being the directory -from which -.Nm -was executed. -.Pp -If the list of arguments is terminated by a semicolon -.Pq Dq Ic \&; , -then -.Ar utility -is invoked once per pathname. -If -the string -.Dq Ic {} -appears one or more times in the utility name or arguments, -then it is replaced by the pathname of the current file -(but it need not appear, in which case the pathname -will not be passed to -.Ar utility ) . -The semicolon-terminated form of the -.Ic -exec -primary returns true if and only if -.Ar utility -exits with a zero exit status. -Note that the semicolon will have to be escaped on the shell command line -in order to be passed as a parameter. -.Pp -If the list of arguments is terminated by a plus sign -.Pq Dq Ic \&+ , -then the pathnames for which the primary is evaluated are aggregated -into sets, and -.Ar utility -will be invoked once per set, similar to -.Xr xargs 1 . -In this case the string -.Dq Ic {} -must appear, and must appear as the last item in the argument list, -just before the -.Dq Ic \&+ -parameter, and is replaced by the pathnames of the current set of files. -Each set is limited to no more than 5,000 pathnames, -and is also limited such that the total number of bytes in the argument -list does not exceed -.Dv ARG_MAX . -The plus-terminated form of the -.Ic -exec -primary always returns true. -If the plus-terminated form of the -.Ic -exec -primary results in any invocation of -.Ar utility -exiting with non-zero exit status, then -.Nm -will eventually exit with non-zero status as well, -but this does not cause -.Nm -to exit early. -.Pp -.It Ic -execdir Ar utility Oo argument ... Oc Ic \&; -The -.Ic -execdir -primary is similar to the semicolon-terminated -.Pq Dq Ic \&; -variant of the -.Ic -exec -primary, with the exception that -.Ar utility -will be executed from the directory that holds -the current file. -Only the base filename is substituted for the string -.Dq Ic {} . -Set aggregation -.Pq Do Ic \&+ Dc termination -is not supported. -.Pp -.It Ic -exit Op Ar status -This primary causes -.Nm -to stop traversing the file system and exit immediately, -with the specified numeric exit status. -If the -.Ar status -value is not specified, then -.Nm -will exit with status zero. -Note that any preceding primaries will be evaluated and acted upon -before exiting. -.Pp -.It Ic -false -This primary always evaluates to false. -This can be used following a primary that caused the -expression to be true to make the expression to be false. -This can be useful after using a -.Ic -fprint -primary so it can continue to the next expression (using an -.Cm -or -operator, for example). -.Pp -.It Ic -flags Oo Fl Oc Ns Ar flags -If -.Ar flags -are preceded by a dash -.Pq Dq Ic \- , -this primary evaluates to true -if at least all of the bits in -.Ar flags -are set in the file's flags bits. +.BR /usr/5bin/posix2001/find , +but not with +.BR /usr/5bin/find . +.TP +.BR \-perm " mode" +True if the file permission flags +exactly +match the +octal number +or symbolic +.I mode +(see +.IR chmod (1)). If -.Ar flags -are not preceded by a dash, this primary evaluates to true if -the bits in -.Ar flags -exactly match the file's flags bits. -If -.Ar flags +.I mode +is prefixed by a minus sign, +the flags are compared: +.IR (flags&mode)==mode . +.TP +.BR \-type " c" +True if the type of the file is -.Dq none , -files with no flags bits set are matched. -(See -.Xr chflags 1 -for more information about file flags.) -.Pp -.It Ic -follow -Follow symbolic links. -.Pp -.It Ic -fprint Ar filename -This primary always evaluates to true. -This creates -.Ar filename -or overwrites the file if it already exists. -The file is created at startup. -It writes the pathname of the current file to this file, followed -by a newline character. -The file will be empty if no files are matched. -.Pp -.It Ic -fstype Ar type -True if the file is contained in a file system of type -.Ar type . -The -.Xr sysctl 8 -command can be used to find out the types of file systems -that are available on the system: -.Bd -literal -offset indent -sysctl vfs.generic.fstypes -.Ed -.Pp -In addition, there are two pseudo-types, -.Dq local -and -.Dq rdonly . -The former matches any file system physically mounted on the system where -the -.Nm -is being executed, and the latter matches any file system which is -mounted read-only. -.Pp -.It Ic -group Ar gname -True if the file belongs to the group -.Ar gname . -If -.Ar gname -is numeric and there is no such group name, then -.Ar gname -is treated as a group id (and considered a numeric argument). -.Pp -.It Ic -iname Ar pattern -True if the last component of the pathname being examined matches -.Ar pattern -in a case-insensitive manner. -Special shell pattern matching characters -.Po -.Dq \&[ , -.Dq \&] , -.Dq \&* , -and -.Dq \&? -.Pc -may be used as part of -.Ar pattern . -These characters may be matched explicitly by escaping them with a -backslash -.Pq Dq \e . -.Pp -.It Ic -inum Ar n -True if the file has inode number -.Ar n . -.Pp -.It Ic -iregex Ar regexp -True if the path name of the current file matches the case-insensitive -basic regular expression -.Pq see Xr re_format 7 -.Ar regexp . -This is a match on the whole path, not a search for the regular expression -within the path. -.Pp -.It Ic -links Ar n +.I c, +where +.I c +is +.sp +.TS +lfB l. +b block special file; +c character special file; +d directory; +D Solaris door; +f plain file; +l symbolic link; +n HP-UX network special file; +p named pipe; +s socket. +.TE +.TP +.B \-follow +Always true; +causes find to follow symbolic links. +The `\fB\-type\fR l' condition never occurs in this case. +.TP +.BR \-links " n" True if the file has -.Ar n +.I n links. -.Pp -.It Ic -rm -This primary is an alias for -.Ic -delete . -.Pp -.It Ic -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 -.Dq -> . -The format is identical to that produced by -.Dq ls -dgils . -.Pp -.It Ic -maxdepth Ar depth -True if the current search depth is less than or equal to what is specified in -.Ar depth . -.Pp -.It Ic -mindepth Ar depth -True if the current search depth is at least what is specified in -.Ar depth . -.Pp -.It Ic -mmin Ar n -True if the difference between the file last modification time and the time -.Nm -was started, rounded up to the next full minute, is -.Ar n -minutes. -.Pp -.It Ic -mtime Ar n -True if the difference between the file last modification time and the time -.Nm -was started, rounded up to the next full 24-hour period, is -.Ar n -24-hour periods. -.Pp -.It Ic -ok Ar utility Oo argument ... Oc Ic \&; +.TP +.BR \-user " uname" +True if the file belongs to the user +.I uname +(login name or numeric user ID). +.TP +.BR \-group " gname" +True if the file belongs to group +.I gname +(group name or numeric group ID). +.TP +.BR \-size " n[" c ] +True if the file is +.I n +blocks long (512 bytes per block), +or, with +.BR c , +.I n +bytes long. +.TP +.BR \-inum " n" +True if the file has inode number +.I n. +.TP +.BR \-atime " n" +True if the file has been accessed in +.I n +days. +.TP +.BR \-mtime " n" +True if the file has been modified in +.I n +days. +.TP +.BR \-ctime " n" +True if the file inode has been changed in +.I n +days. +.TP +.BR \-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. +.TP +.BR \-exec " command ... " "{} +" +Always true. The -.Ic -ok -primary is similar to the semicolon-terminated -.Pq Dq \&; -variant of 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 -.Dq y , -the command is not executed and the -.Ic -ok -primary evaluates to false. -Set aggregation -.Pq Do \&+ Dc termination -is not supported. -.Pp -.It Ic -name Ar pattern -True if the last component of the pathname being examined matches -.Ar pattern . -Special shell pattern matching characters -.Po -.Dq \&[ , -.Dq \&] , -.Dq \&* , +.B {} +argument is replaced by a set of aggregated pathnames. +Each pathname is passed to the command as a single argument. +Every time a limit of arguments is reached +by the pathnames found so far, +the command is executed, +and aggregating starts using a new set +beginning with the next pathname. +If any invocation of command +returns a non-zero exit status, +find will return a non-zero exit status +when its processing is done. +.TP +.BR \-ok " command ... " ; +Like +.B \-exec +except that the generated command is written on +the standard output, then the standard input is read +and the command executed only upon response +.BR y . +.TP +.B \-print +Always true; +causes the current pathname to be printed. +If no expression is given, +.B \-print +is used per default +(as a change introduced by POSIX.2). +.TP +.BR \-newer " file" +True if +the current file has been modified more recently than the argument +.I file. +.TP +.BR \-anewer " file" +True if +the current file has been accessed more recently than the argument +.I file +was modified. +This primary is an extension. +.TP +.BR \-cnewer " file" +True if a status change +has occurred on the current file +more recently than the argument +.I file +was modified. +This primary is an extension. +.TP +.B \-depth +Always true; +causes the contents of each directory +to be examined before the directory itselves. +.TP +.BR \-fstype " type" +True if the current file +resides on a file system of the given type. +.TP +.B \-local +True if the file is on a local file system. +Are file system types except for +.I nfs and -.Dq \&? -.Pc -may be used as part of -.Ar pattern . -These characters may be matched explicitly by escaping them with a -backslash -.Pq Dq \e . -.Pp -.It Ic -newer Ar file -True if the current file has a more recent last modification time than -.Ar file . -.Pp -.It Ic -newerXY Ar reference -For compatibility with Gnu findutils. -.Bl -column -offset indent ".Sy findutils" ".Sy equivalent" -.It Sy findutils Ta Sy find -.It Sy option Ta Sy equivalent -.It -neweraa Ta -anewer -.It -newerat Ta -asince -.It -newercc Ta -cnewer -.It -newerct Ta -csince -.It -newermm Ta -newer -.It -newermt Ta -since -.El -.Pp -Other option variants from findutils are not implemented. -.Pp -.It Ic -nouser -True if the file belongs to an unknown user. -.Pp -.It Ic -nogroup -True if the file belongs to an unknown group. -.Pp -.It Ic -path Ar pattern -True if the pathname being examined matches -.Ar pattern . -Special shell pattern matching characters -.Po -.Dq \&[ , -.Dq \&] , -.Dq \&* , +.I smbfs +are currently considered local. +.TP +.B \-mount +Always true; +restricts the search to directories +that have the same device id +as the currently examined path operand. +.TP +.B \-xdev +The same as +.BR \-mount . +This primary has been introduced by POSIX. +.TP +.B \-nouser +True if the file is owned by a user +that has no login name. +.TP +.B \-nogroup +True if the file is owned by a group +that lacks a group name. +.TP +.B \-prune +Always true. +Causes the search for the current path +to be stopped once the primary is evaluated. +When combined with +.BR \-depth , +.B \-prune +has no effect. +.TP +.BR \-cpio " device" +Always true. +Writes the file on the named device +in binary cpio format (5120-byte records). +Implies +.BR \-depth . +.TP +.BR \-ncpio " device" +Always true. +Writes the file on the named device +in SVR4 ASCII cpio format (5120-byte records). +Implies +.BR \-depth . +.PP +The primaries may be combined using the following operators +(in order of decreasing precedence): +.TP 4 +1) +A parenthesized group of primaries and operators +(parentheses are special to the Shell and must be escaped). +.TP 4 +2) +The negation of a primary +(`!' is the unary +.I not +operator). +.TP 4 +3) +Concatenation of primaries +(the +.I and +operation +is implied by the juxtaposition of two primaries +or by an explicit +.B \-a +operator). +.TP 4 +4) +Alternation of primaries +.RB "(`" \-o "' is the" +.I or +operator). +.PP +Options have been introduced by POSIX.1-2001 +in addition to the expression operators. +They must preceed the +.I pathname-list +one the command line +and have no effect on boolean expression processing. +.TP +.B \-H +Follow symbolic links given on the command line, +but do not follow symbolic links encountered during directory traversal. +.TP +.B \-L +Follow all symbolic links found, +like the +.I \-follow +primary. +.PP +With the +.I \-follow +primary or the +.I \-L +option, hierarchy loops caused by symbolic links are detected, +but only +.B /usr/5bin/posix2001/find +prints an error message. +The offending link is not followed, +and operation continues with the next directory entry found. +.SH EXAMPLES +To remove all files named +`a.out' or `*.o' that have not been accessed for a week: +.IP "" .2i +find / \\( \-name a.out \-o \-name \'*.o\' \\) +\-atime +7 \-exec rm {} \\; +.PP +The rm command is executed once for each file. +The form +.IP "" .2i +find / \\( \-name a.out \-o \-name \'*.o\' \\) +\-atime +7 \-exec rm {} + +.PP +is faster since the rm command is executed with a set of pathnames. +.PP +To find all files below the directory `documents' +that contain the regular expression `string': +.IP "" .2i +find documents \-type f \-exec grep string {} + +.PP +To find all files in the directory `home', +not descending into its subdirectories: +.IP "" .2i +find home ! \-name home \-prune +.PP +To check whether the file `diary' +has been updated within the last two days; +the name of the file is printed if true, +and is not printed otherwise: +.IP "" .2i +find diary \-prune \-mtime \-2 +.SH FILES +/etc/passwd +.br +/etc/group +.SH "ENVIRONMENT VARIABLES" +.TP +.BR LANG ", " LC_ALL +See +.IR locale (7). +.TP +.B LC_COLLATE +Affects the collation order for range expressions, +equivalence classes, and collation symbols in patterns with +.BR /usr/5bin/s42/find , +.BR /usr/5bin/posix/find , and -.Dq \&? -.Pc -may be used as part of -.Ar pattern . -These characters may be matched explicitly by escaping them with a -backslash -.Pq Dq \e . -Slashes -.Pq Dq / -are treated as normal characters and do not have to be -matched explicitly. -.Pp -.It Ic -perm Oo Fl Oc Ns Ar mode -The -.Ar mode -may be either symbolic (see -.Xr 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' file mode -creation mask. -If the mode is octal, only bits 07777 -.Pf ( Dv S_ISUID -| -.Dv S_ISGID -| -.Dv S_ISTXT -| -.Dv S_IRWXU -| -.Dv S_IRWXG -| -.Dv S_IRWXO ) -of the file's mode bits participate -in the comparison. -If the mode is preceded by a dash -.Pq Dq Ic \- , -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 -.Pq Dq Ic \- . -.Pp -.It Ic -print -This primary always evaluates to true. -It prints the pathname of the current file to standard output, followed -by a newline character. -If none of -.Ic -delete , -.Ic -exec , -.Ic -execdir , -.Ic -exit , -.Ic -fprint , -.Ic -ls , -.Ic -ok , -.Ic -print0 , -.Ic -printx , -nor -.Ic -rm -is specified, the given expression shall be effectively replaced by -.Cm \&( Ns Ar given\& expression Ns Cm \&) -.Ic -print . -.Pp -.It Ic -print0 -This primary always evaluates to true. -It prints the pathname of the current file to standard output, followed -by a NUL character. -.Pp -.It Ic -printx -This primary always evaluates to true. -It prints the pathname of the current file to standard output, -with each space, tab, newline, backslash, dollar sign, and single, -double, or back quotation mark prefixed by a backslash, so the output of -.Nm -can safely be used as input to -.Xr xargs 1 . -.Pp -.It Ic -prune -This primary always evaluates to true. -It causes -.Nm -to not descend into the current file. -Note, the -.Ic -prune -primary has no effect if the -.Fl d -option was specified. -.Pp -.It Ic -regex Ar regexp -True if the path name of the current file matches the case-sensitive -basic regular expression -.Pq see Xr re_format 7 -.Ar regexp . -This is a match on the whole path, not a search for the regular expression -within the path. -.Pp -.It Ic -since Ar timestamp -True if the file last modification time is more recent than -.Ar timestamp . -.Pp -.It Ic -size Ar n Ns Op Cm c -True if the file's size, rounded up, in 512-byte blocks is -.Ar n . -If -.Ar n -is followed by a -.Dq Ic c , -then the primary is true if the file's size is -.Ar n -bytes. -.Pp -.It Ic -type Ar t -True if the file is of the specified type. -Possible file types are as follows: -.Pp -.Bl -tag -width flag -offset indent -compact -.It Cm b -block special -.It Cm c -character special -.It Cm d -directory -.It Cm f -regular file -.It Cm l -symbolic link -.It Cm p -FIFO -.It Cm s -socket -.It Cm W -whiteout -.It Cm w -whiteout -.El -.Pp -.It Ic -user Ar username -True if the file belongs to the user -.Ar username . -If -.Ar username -is numeric and there is no such user on the system, then -.Ar username -is treated as a user id (and considered a numeric argument). -.Pp -.It Ic -xdev -This primary always evaluates to true. -It causes find not to descend past directories that have a different -device ID -.Va ( st_dev , -see -.Xr stat 2 -S5.6.2 [POSIX.1]). -.El -.Sh OPERATORS -The primaries may be combined using the following operators. -The operators are listed in order of decreasing precedence. -.Bl -tag -width (expression) -.It Cm \&( Ar expression Cm \&) -This evaluates to true if the parenthesized expression evaluates to -true. -.It Cm \&! Ar expression -This is the unary -.Tn NOT -operator. -It evaluates to true if the expression is false. -.It Ar expression Cm -and Ar expression -.It Ar expression expression -The -.Cm -and -operator is the logical -.Tn 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. -.It Ar expression Cm -or Ar expression +.BR /usr/5bin/posix2001/find . +.TP +.B LC_CTYPE +Determines the mapping of bytes to characters +and character class expressions +in patterns. +.TP +.B SYSV3 +Causes the text of some diagnostic messages to be changed; +causes +.I \-ncpio +to create traditional ASCII cpio format archives. +.SH "SEE ALSO" +chmod(1), +cpio(1), +pax(1), +sh(1), +xargs(1), +stat(2), +glob(7), +locale(7) +.SH NOTES +Undesired effects can result if file names printed by +.I find +contain newline characters, +as shown by the following command sequence: +.RS +.sp +.nf +$ mkdir \-p \'dummy +> /etc\' +$ touch \'dummy +> /etc/passwd\' +$ find . \-print +\&. +\&./dummy +.sp +\&./dummy +/etc +\&./dummy +/etc/passwd +$\ +.fi +.sp +.RE +Shell scripts or utilities unaware of this problem +will operate on +.I /etc/passwd +(or other arbitrary file names) +when reading such output; +a malicious user might create such files +to read or overwrite privileged information. +To circumvent this problem, +one of the following proposals should be taken +unless the file hierarchy traversed by the +.I find +command is definitively known not to contain such file names: +.IP \(en 2 +If the output is read by the +.I xargs +utility to gain faster execution by aggregating command arguments as in +.in +2 +.sp +find . \-print | xargs \fIcommand\fR +.sp +.in -2 +a safe and equally fast substitute is the +.in +2 +.sp +find . \-exec \fIcommand\fR {} + +.sp +.in -2 +operand of +.IR find ; +it is not portably accepted by +.I find +implementations, though. +.IP \(en 2 +A universal solution for submitting file names to the +.I xargs +utility is given in the +.I NOTES +section of +.IR xargs (1). +.IP \(en 2 +The method employed by this script can be generalized as follows: +If the script or utility reading the output of +.I find +provides the necessary parsing capabilities, +special path prefixes can be given to the +.I find +command, such as +.in +2 +.sp +find /.//. \-print +.sp +.in -2 +for absolute path names or +.in +2 +.sp +find .//. \-print +.sp +.in -2 +for relative path names. +Since adjacent slash characters never appear +in relative file names found during directory traversal, +they can be taken as delimiters; +a line starts a new path name +only if the delimiter appears. +.IP \(en 2 The -.Cm -or -operator is the logical -.Tn 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. -.El -.Pp -All operands and primaries must be separate arguments to -.Nm . -Primaries which themselves take arguments expect each argument -to be a separate argument to -.Nm . -.Sh EXIT STATUS +.I \-name +operand can be used to exclude all path names +that contain newline characters, as in +.in +2 +.sp +.nf +$ find . \-name \'* +> *\' \-prune \-o ! \-name \'* +> *\' \-print +.sp +.fi +.in -2 +Note that certain other implementations of +.I find +require a leading period in the pattern +to match file names with a leading period; +it may be necessary to exclude such patterns as well. +.IP \(en 2 The -.Nm -utility normally exits 0 on success, and exits with 1 under certain -internal error conditions. -If any invocations of -.Dq Ic -exec Ar ... Ic \&+ -primaries return non-zero exit-status, then -.Nm -will do so as well. -.Sh EXAMPLES -The following examples are shown as given to the shell: -.Bl -tag -width findx -.It Li "find / \e! -name \*q*.c\*q \-print" -Print out a list of all the files whose names do not end in -.Dq \&.c . -.It Li "find / \-newer ttt \-user wnj \-print" -Print out a list of all the files owned by user -.Dq wnj -that are newer than the file -.Dq ttt . -.It Li "find . \-type f \-mmin \-30 \-print \-or \-mindepth 1 \-prune" -Print out a list of all the files in the current directory that are -newer than 30 minutes. -.It Li "find . \-type f \-atime +10 \-mindepth 2 \-print" -Print out a list of all the files in any sub-directories that have not -been accessed in the past ten days. -.It Li "find . \-mtime +90 \-exec rm \-i {} + \-or \-mindepth 1 \-prune" -Interactively remove all of the files in the current directory that have -not been modified in 90 days. -.It Li "find . \-type f \-mtime +90 \-ok mv {} {}.old \e;" -Interactively rename all of the files in the current directory and all -sub-directories that have not been modified in 90 days. -.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 -.Dq ttt -and owned by -.Dq wnj . -.It Li "find / \e( \-newer ttt \-or \-user wnj \e) \-print" -Print out a list of all the files that are either owned by -.Dq wnj -or that are newer than -.Dq ttt . -.It Li "find / \e( \-newer ttt \-or \-user wnj \e) \-exit 1" -Return immediately with a value of 1 if any files are found that are either -owned by -.Dq wnj -or that are newer than -.Dq ttt , -but do not print them. -.It Li "find / \e( \-newer ttt \-or \-user wnj \e) \-ls \-exit 1" -Same as above, but list the first file matching the criteria before exiting -with a value of 1. -.It Li "find . \-type f \-exec sh \-c 'file=\*[q]$1\*[q]; ...;' - {} \;" -Perform an arbitrarily complex shell command for every file. -.El -.Sh SEE ALSO -.Xr chflags 1 , -.Xr chmod 1 , -.Xr locate 1 , -.Xr xargs 1 , -.Xr stat 2 , -.Xr fts 3 , -.Xr getgrent 3 , -.Xr getpwent 3 , -.Xr strmode 3 , -.Xr re_format 7 , -.Xr symlink 7 , -.Xr sysctl 8 -.Sh STANDARDS +.I \-depth +operand cannot be combined with the +.I \-prune +operand used in the previous example. +When the directory name must be printed +after file names below that directory, +as with the +.IR cpio +command, +file names that leave the specified path hierarchy +should be filtered out: +.in +2 +.sp +find . \-depth | egrep \'^\e./\' | cpio \-oc \-O /dev/rmt/c0s0 +.sp +.in -2 +(note the escaped regular expression meta-character). +.IP \(en 2 The -.Nm -utility syntax is a superset of the syntax specified by the -.St -p1003.2 -standard. -.Pp -The options and the -.Ic -amin , -.Ic -anewer , -.Ic -asince , -.Ic -cmin , -.Ic -cnewer , -.Ic -csince , -.Ic -delete , -.Ic -empty , -.Ic -execdir , -.Ic -follow , -.Ic -fstype , -.Ic -iname , -.Ic -inum , -.Ic -iregex , -.Ic -links , -.Ic -ls , -.Ic -maxdepth , -.Ic -mindepth , -.Ic -mmin , -.Ic -path , -.Ic -print0 , -.Ic -printx , -.Ic -regex , -.Ic -rm , -and -.Ic -since -primaries are extensions to -.St -p1003.2 . -.Pp -Historically, the -.Fl d , -.Fl h , +.I \-cpio and -.Fl x -options were implemented using the primaries -.Dq Ic -depth , -.Dq Ic -follow , -and -.Dq Ic -xdev . -These primaries always evaluated to true, and always -took effect when the -.Ar expression -was parsed, before the file system traversal began. -As a result, some legal expressions could be confusing. -For example, in the expression -.Dq Ic -print Ic -or Ic -depth , -.Ic -print -always evaluates to true, so the standard meaning of -.Ic -or -implies that -.Ic -depth -would never be evaluated, but that is not what happens; -in fact, -.Ic -depth -takes effect immediately, without testing whether -.Ic -print -returns true or false. -.Pp -Historically, the operator -.Dq Ic -or -was implemented as -.Dq Ic -o , -and the operator -.Dq Ic -and -was implemented as -.Dq Ic -a . -.Pp -Historic implementations of the -.Dq Ic -exec -and -.Dq Ic -ok -primaries did not replace the string -.Dq Ic {} -in the utility name or the -utility arguments if it did not appear as a separate argument. -This version replaces it no matter where in the utility name or arguments -it appears. -.Pp -Support for -.Dq Ic -exec Ar ... Ic \&+ -is consistent with -.Em IEEE PASC Interpretation 1003.2 #210 , -though the feature originated in -.Tn SVR4 . -.Pp +.I \-ncpio +operands will automatically exclude file names +that contain newline characters +with this +.I find +implementation. +.PP The -.Ic -delete -primary does not interact well with other options that cause the file system -tree traversal options to be changed. -.Sh HISTORY -A much simpler -.Nm -command appeared in First Edition AT&T Unix. -The syntax had become similar to the present version by -the time of the Fifth Edition. -.Sh BUGS -The special characters used by -.Nm -are also special characters to many shell programs. -In particular, the characters -.Dq \&* , -.Dq \&[ , -.Dq \&] , -.Dq \&? , -.Dq \&( , -.Dq \&) , -.Dq \&! , -.Dq \e , -and -.Dq \&; -may have to be escaped from the shell. -.Pp -As there is no delimiter separating options and file names or file -names and the -.Ar expression , -it is difficult to specify files named -.Dq -xdev -or -.Dq \&! . -These problems are handled by the -.Fl f -option and the -.Xr getopt 3 -.Dq -- -construct. +.I \-print0 +operand supported by some other implementations +is considered a very limited work-around +since it does not allow the output to be processed +by utilities unaware of NUL characters; +it has therefore not been included here. -- cgit v1.2.3-60-g2f50