find(1)								      find(1)



NAME

  find - Finds files matching an expression

SYNOPSIS

  find pathname ...  expression

DESCRIPTION

  The find command recursively searches the directory tree for each specified
  pathname, seeking files that match the Boolean expression.  The output from
  the find command varies depending on the terms used in expression.

  Pathname

  The pathname operand is the starting point in a directory tree for the
  search. If a filename is used for the pathname, the current directory is
  assumed. A null pathname is not permitted, i.e., find "" returns an error.

  Expressions

  In the following descriptions, the argument number is a decimal integer
  that can be specified as +number (more than number), -number (less than
  number), or number (exactly number).

  -atime number
      TRUE if the file was accessed in the past number days, where number is
      interpreted as described in this reference page.

  -cpio device
      Writes the current file to device in cpio format.	 See the cpio com-
      mand.

  -ctime number
      TRUE if the file inode was changed in the past number days, where
      number is interpreted as described in this reference page.

  -depth
      Always TRUE.  This causes the descent of the directory hierarchy to be
      done so that all entries in a directory are affected before the direc-
      tory itself.  This can be useful when find is used with cpio to
      transfer files that are contained in directories without write permis-
      sion.

  -exec command
      TRUE if the command runs and returns a 0 (zero) value as exit status.
      The end of command must be punctuated by a quoted or escaped ; (semi-
      colon).  The command parameter { } is replaced by the current pathname.

  \( expression \)
      TRUE if expression is TRUE.

  -fstype type
      TRUE if the file system to which the file belongs is of the type type
      as follows:

      nfs Network File System

      pc  XENIX

      ufs UNIX file system (Berkeley fast file system).	 This is the default.

      cdfs
	  ISO 9660 CD-ROM (Compact Disk Read-Only Memory) file system

  -group group
      TRUE if the file belongs to group.  If group is numeric and does not
      appear as a group name in the /etc/group file, it is interpreted as a
      group ID.

  -i number
      TRUE if file has inode number.

  -inum number
      TRUE if file has inode number.

  -links number
      TRUE if the file has number links.  See the ln command.

  -ls Always TRUE; causes pathname to be printed together with its associated
      statistics.  These include, respectively, inode number, size in kilo-
      bytes (1024 bytes), protection mode, number of hard links, user, group,
      size in bytes, and modification time.  If the file is a special file,
      the size field will instead contain the major and minor device numbers.

      The find command does not follow symbolic links to other directories or
      files.  Rather, it applies the specified selection criteria to the sym-
      bolic links themselves, treating them as if they were ordinary files.
      (For more information on symbolic links, see ln(1).)

  -mount
      TRUE if the current file is on the same file system as the current
      starting pathname.

  -mtime number
      TRUE if the file was modified in the past number days, where number is
      interpreted as described in this reference page.

  -name file
      TRUE if file matches the filename.  You can use pattern-matching char-
      acters, provided they are quoted.	 In an expression such as [a-z], the
      dash means through according to the current collating sequence.  The
      collating sequence is determined by the value of the LC_COLLATE
      environment variable.

  -ncpio size
      Sets the input/output size (5120 bytes by default) to size.

  -newer file
      TRUE if the current file was modified more recently than the file indi-
      cated by file.

  -ok command
      The find command asks you whether it should start command.  If your
      response begins with y, or the locale's equivalent of a y, command is
      started.	The end of command must be punctuated by a quoted or escaped
      semicolon.

  -perm octal_number
      TRUE if the file permission code of the file exactly matches
      octal_number (see the chmod command).

      The octal_number argument may be up to three octal digits.  If you want
      to test the higher-order permission bits (the set-user-ID bit or set-
      group-ID bit, for example), prefix the octal_number argument with a -
      (dash).  This makes more flag bits significant (see the stat system
      call for an explanation of the additional bits), and also changes the
      comparison to
	   (flags&octal_number)==octal_number

  -print
      Always TRUE; causes the current pathname to be displayed.	 If an
      expression is not specified or if expression is not -ok or -exec,
      -print is the default.  For example, the following commands produce the
      same result:
	   find .
	   find . -print
	   find . -name "*"

  -prune
      Always TRUE.  Prunes the search tree at the file.	 That is, if the
      current pathname is a directory, The find command does not descend into
      that directory.  In a networking environment, this flag keeps the find
      command from searching through remote file systems.

  -size number
      TRUE if the file is number blocks long (512 bytes per block).  For this
      comparison, the file size is rounded up to the nearest block.

  -size numberc
      TRUE if the file is number bytes long.

  -size numberk
      TRUE if the file is number kilobytes long.  For this comparison, the
      file size is rounded up to the nearest kilobyte.

  -type type
      TRUE if the file type is of the specified type as follows:

      b	  Block special file

      c	  Character special file

      d	  Directory

      f	  Plain file

      l	  Symbolic link

      p	  FIFO (a named pipe)

      s	  Socket

  -user user
      TRUE if the file belongs to user.	 If user is numeric and does not
      appear as a login name in the /etc/passwd file, it is interpreted as a
      user ID.

  -xdev
      Always TRUE; causes find to not traverse down a file system different
      from the one on which the current pathname resides.

  The primaries may be combined using the following operators (in descending
  order of precedence):

   1.  A parenthesized group of primaries and operators (parentheses are spe-
       cial 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 juxta-
       position of two primaries but can also be specified explicitly with
       the -a operator).

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

  To avoid unpredictable results when using a range expression to match a
  class of characters, use a character class expression rather than a stan-
  dard range expression.  For information about character class expressions,
  see the grep command.

EXAMPLES

   1.  To list all files in the file system with a given base filename,
       enter:
	    find  /  -name  .profile  -print


       This searches the entire file system and writes the complete pathnames
       of all files named .profile.  The / (backslash) tells find to search
       the root directory and all of its subdirectories.  This may take a
       while, so it is best to limit the search by specifying the directories
       where you think the files might be.

   2.  To list the files with a specific permission code in the current
       directory tree, enter:
	    find  .  -perm  0600  -print


       This lists the names of the files that have only owner-read and
       owner-write permission.	The . (dot) tells find to search the current
       directory and its subdirectories.  See the chmod command for details
       about permission codes.

   3.  To search several directories for files with certain permission codes,
       enter:
	    find  manual  clients  proposals  -perm  -0600  -print


       This lists the names of the files that have owner-read and owner-write
       permission and possibly other permissions.  The directories manual,
       clients, and proposals, and their subdirectories, are searched.	Note
       that -perm 0600 in the previous example selects only files with per-
       mission codes that match 0600 exactly.  In this example, -perm -0600
       selects files with permission codes that allow at least the accesses
       indicated by 0600.  This also matches the permission codes 0622 and
       2744.

   4.  To search for regular files with multiple links, enter:
	    find  .  -type  f  -links  +1  -print


       This lists the names of the ordinary files (-type f) that have more
       than one link (-links +1).  Note that every directory has at least two
       links:  the entry in its parent directory and its own . (dot) entry.
       See the ln command for details about multiple file links.

   5.  To find all accessible files whose pathname begins with find, enter:
	    find find -print


   6.  To remove all files named a.out or *.o that have not been accessed for
       a week and that are not mounted using nfs, enter:
	    find / \( -name a.out -o -name '*.o' \) -atime +7 -exec \
		    rm {} \; -o -fstype nfs -prune


   7.  To find all files modified within the last 24 hours, enter:
	    find . -mtime 1 -print

   8.  To find all files on the root file system, enter:
	    find / -mount -print

   9.  To write all the files on the root file system to tape, enter:
	    find / -mount -print -cpio /dev/rmt?h
	    cpio -iBvt