SYNOPSIS

       find pathname-list expression


DESCRIPTION

       Find  recursively descends the directory hierarchy for each pathname in
       the pathname-list (i.e., one or  more  pathnames)  seeking  files  that
       match  a  boolean  expression written in the primaries given below.  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.

       -name filename
                 True  if the filename argument matches the current file name.
                 Normal Shell argument syntax as described in glob(7)  may  be
                 used if escaped (watch out for `[', `?' and `*').  The inter-
                 nationalization  constructs  `[[:class:]]',  `[[=e=]]',   and
                 `[[.cs.]]'     are    understood   with   /usr/5bin/s42/find,
                 /usr/5bin/posix/find, and /usr/5bin/posix2001/find,  but  not
                 with /usr/5bin/find.

       -perm mode
                 True  if  the  file  permission flags exactly match the octal
                 number or symbolic mode (see chmod(1)).  If mode is  prefixed
                 by  a minus sign, the flags are compared: (flags&mode)==mode.

       -type c   True if the type of the file is c, where c is


                 lfB l.  b    block special file; c    character special file;
                 d    directory; D    Solaris door; f    plain file; l    sym-
                 bolic link; n    HP-UX network special file; p    named pipe;
                 s    socket.

       -follow   Always  true;  causes  find  to  follow  symbolic links.  The
                 `-type l' condition never occurs in this case.

       -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[c]
                 True if the file is n blocks long (512 bytes per block),  or,
                 with c, n bytes long.

       -inum n   True if the file has inode number n.

       -atime n  True if the file has been accessed in n days.
                 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.

       -ok command ... ;
                 Like  -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 y.

       -print    Always  true;  causes the current pathname to be printed.  If
                 no expression is given, -print is  used  per  default  (as  a
                 change introduced by POSIX.2).

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

       -anewer file
                 True if the current file has been accessed more recently than
                 the  argument  file  was modified.  This primary is an exten-
                 sion.

       -cnewer file
                 True if a status change has occurred on the current file more
                 recently  than  the argument file was modified.  This primary
                 is an extension.

       -depth    Always true; causes the contents  of  each  directory  to  be
                 examined before the directory itselves.

       -fstype type
                 True  if  the  current  file  resides on a file system of the
                 given type.

       -local    True if the file is on a local file system.  Are file  system
                 types  except  for  nfs  and  smbfs  are currently considered
                 local.

       -mount    Always true; restricts the search to  directories  that  have
                 the same device id as the currently examined path operand.

       -xdev     The  same  as  -mount.   This  primary has been introduced by
                 POSIX.

       -nouser   True if the file is owned by a user that has no login name.

       -nogroup  True if the file is owned by a group that lacks a group name.

       -prune    Always  true.   Causes  the search for the current path to be
       1)  A parenthesized group of primaries and operators  (parentheses  are
           special to the Shell and must be escaped).

       2)  The negation of a primary (`!' is the unary not operator).

       3)  Concatenation  of  primaries  (the  and operation is implied by the
           juxtaposition of two primaries or by an explicit -a operator).

       4)  Alternation of primaries (`-o' is the or operator).

       Options have been introduced by POSIX.1-2001 in addition to the expres-
       sion  operators.   They  must preceed the pathname-list one the command
       line and have no effect on boolean expression processing.

       -H     Follow symbolic links given on the command line, but do not fol-
              low symbolic links encountered during directory traversal.

       -L     Follow all symbolic links found, like the -follow primary.

       With  the  -follow  primary or the -L option, hierarchy loops caused by
       symbolic links are detected, but only  /usr/5bin/posix2001/find  prints
       an  error  message.   The offending link is not followed, and operation
       continues with the next directory entry found.


EXAMPLES

       To remove all files named `a.out' or `*.o' that have not been  accessed
       for a week:

         find / \( -name a.out -o -name '*.o' \) -atime +7 -exec rm {} \;

       The rm command is executed once for each file.  The form

         find / \( -name a.out -o -name '*.o' \) -atime +7 -exec rm {} +

       is faster since the rm command is executed with a set of pathnames.

       To find all files below the directory `documents' that contain the reg-
       ular expression `string':

         find documents -type f -exec grep string {} +

       To find all files in the directory `home', not descending into its sub-
       directories:

         find home ! -name home -prune

       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  oth-
       erwise:

         find diary -prune -mtime -2

       LC_CTYPE
              Determines the mapping of  bytes  to  characters  and  character
              class expressions in patterns.

       SYSV3  Causes  the  text  of  some  diagnostic  messages to be changed;
              causes -ncpio to create traditional ASCII cpio format  archives.


SEE ALSO

       chmod(1), cpio(1), pax(1), sh(1), xargs(1), stat(2), glob(7), locale(7)


NOTES

       Undesired effects can result if file names printed by find contain new-
       line characters, as shown by the following command sequence:

              $ mkdir -p 'dummy
              > /etc'
              $ touch 'dummy
              > /etc/passwd'
              $ find . -print
              .
              ./dummy

              ./dummy
              /etc
              ./dummy
              /etc/passwd
              $

       Shell  scripts  or  utilities  unaware  of this problem will operate on
       /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  propos-
       als  should  be  taken  unless the file hierarchy traversed by the find
       command is definitively known not to contain such file names:

       - If the output is read by the xargs utility to gain  faster  execution
         by aggregating command arguments as in

           find . -print | xargs command

         a safe and equally fast substitute is the

           find . -exec command {} +

         operand of find; it is not portably accepted by find implementations,
         though.

       - A universal solution for submitting file names to the  xargs  utility
         is given in the NOTES section of xargs(1).

       - The  method employed by this script can be generalized as follows: If
         the script or utility reading the output of find provides the  neces-

       - The  -name operand can be used to exclude all path names that contain
         newline characters, as in

           $ find . -name '*
           > *' -prune -o ! -name '*
           > *' -print

         Note that certain other implementations of  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.

       - The -depth operand cannot be combined with the -prune operand used in
         the  previous example.  When the directory name must be printed after
         file names below that directory, as with the cpio command, file names
         that leave the specified path hierarchy should be filtered out:

           find . -depth | egrep '^\./' | cpio -oc -O /dev/rmt/c0s0

         (note the escaped regular expression meta-character).

       - The  -cpio  and -ncpio operands will automatically exclude file names
         that contain newline characters with this find implementation.

       The -print0 operand supported by some other implementations is  consid-
       ered  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.



Heirloom Toolchest                  8/14/05                            FIND(1)

Man(1) output converted with man2html