Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
FIND(1)			    General Commands Manual		       FIND(1)

NAME
       find -- walk a file hierarchy

SYNOPSIS
       find [-H	| -L | -P] [-EXdsx] [-f	path] path ... [expression]
       find [-H	| -L | -P] [-EXdsx] -f path [path ...] [expression]

DESCRIPTION
       The  find utility recursively descends the directory tree for each path
       listed, evaluating an  expression  (composed  of	 the  "primaries"  and
       "operands" listed below)	in terms of each file in the tree.

       The options are as follows:

       -E      Interpret  regular  expressions	followed by -regex and -iregex
	       primaries as extended (modern) regular expressions rather  than
	       basic  regular  expressions  (BRE's).   The re_format(7)	manual
	       page fully describes both formats.

       -H      Cause the file information and file type	(see stat(2)) returned
	       for each	symbolic link specified	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 sym-
	       bolic links not on the command line is that of the link itself.

       -L      Cause the file information and file type	(see 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 it-
	       self.

	       This option is equivalent to the	deprecated -follow primary.

       -P      Cause the file information and file type	(see stat(2)) returned
	       for each	symbolic link to be those of the link itself.  This is
	       the default.

       -X      Permit find to be safely	used in	conjunction with xargs(1).  If
	       a file name contains any	of the delimiting characters  used  by
	       xargs(1),  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 characters.

	       However,	you may	wish to	consider the -print0 primary  in  con-
	       junction	with "xargs -0"	as an effective	alternative.

       -d      Cause  find  to perform a depth-first traversal,	i.e., directo-
	       ries are	visited	in post-order and 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.
	       Note, the default is not	a breadth-first	traversal.

	       This option is equivalent to the	-depth	primary	 of  IEEE  Std
	       1003.1-2001 ("POSIX.1").	 The -d	option can be useful when find
	       is used with cpio(1) to process files that are contained	in di-
	       rectories  with	unusual	permissions.  It ensures that you have
	       write permission	while you are placing files  in	 a  directory,
	       then sets the directory's permissions as	the last thing.

       -f      Specify	a  file	 hierarchy for find to traverse.  File hierar-
	       chies may also be specified as the operands immediately follow-
	       ing the options.

       -s      Cause find to traverse the file hierarchies in  lexicographical
	       order,  i.e.,  alphabetical order within	each directory.	 Note:
	       `find -s' and `find | sort' may give different results.

       -x      Prevent find from descending into directories that have	a  de-
	       vice  number different than that	of the file from which the de-
	       scent began.

	       This option is equivalent to the	deprecated -xdev primary.

PRIMARIES
       -Bmin n
	       True if the difference between the time of a file's inode  cre-
	       ation  and  the	time  find was started,	rounded	up to the next
	       full minute, is n minutes.

       -Bnewer file
	       Same as -newerBm.

       -Btime n[smhdw]
	       If no units are specified, this primary evaluates  to  true  if
	       the  difference between the time	of a file's inode creation and
	       the time	find was started, rounded up to	the next full  24-hour
	       period, is n 24-hour periods.

	       If  units  are specified, this primary evaluates	to true	if the
	       difference between the time of a	file's inode creation and  the
	       time  find was started is exactly n units.  Please refer	to the
	       -atime primary description for information  on  supported  time
	       units.

       -acl    May be used in conjunction with other primaries to locate files
	       with extended ACLs.  See	acl(3) for more	information.

       -amin n
	       True  if	 the  difference between the file last access time and
	       the time	find was started, rounded up to	the next full  minute,
	       is n minutes.

       -anewer file
	       Same as -neweram.

       -atime n[smhdw]
	       If  no  units  are specified, this primary evaluates to true if
	       the difference between the file last access time	and  the  time
	       find  was  started, rounded up to the next full 24-hour period,
	       is n 24-hour periods.

	       If units	are specified, this primary evaluates to true  if  the
	       difference  between the file last access	time and the time find
	       was started is exactly n	units.	Possible  time	units  are  as
	       follows:

	       s       second
	       m       minute (60 seconds)
	       h       hour (60	minutes)
	       d       day (24 hours)
	       w       week (7 days)

	       Any number of units may be combined in one -atime argument, for
	       example,	 "-atime -1h30m".  Units are probably only useful when
	       used in conjunction with	the + or - modifier.

       -cmin n
	       True if the difference between the time of last change of  file
	       status information and the time find was	started, rounded up to
	       the next	full minute, is	n minutes.

       -cnewer file
	       Same as -newercm.

       -ctime n[smhdw]
	       If  no  units  are specified, this primary evaluates to true if
	       the difference between the time of last change of  file	status
	       information  and	 the  time find	was started, rounded up	to the
	       next full 24-hour period, is n 24-hour periods.

	       If units	are specified, this primary evaluates to true  if  the
	       difference  between  the	time of	last change of file status in-
	       formation and the time find was started	is  exactly  n	units.
	       Please  refer to	the -atime primary description for information
	       on supported time units.

       -d      Same as depth.  GNU find	implements this	as a primary  in  mis-
	       taken emulation of FreeBSD find(1).

       -delete
	       Delete  found  files  and/or directories.  Always returns true.
	       This executes from the current working directory	 as  find  re-
	       curses down the tree.  It will not attempt to delete a filename
	       with  a "/" character in	its pathname relative to "." for secu-
	       rity reasons.  Depth-first traversal processing is  implied  by
	       this  option.  Following	symlinks is incompatible with this op-
	       tion.

       -depth  Always true; same as the	-d option.

       -depth n
	       True if the depth of the	file relative to the starting point of
	       the traversal is	n.

       -empty  True if the current file	or directory is	empty.

       -exec utility [argument ...] ;
	       True if the program named utility returns a zero	value  as  its
	       exit  status.  Optional arguments may be	passed to the utility.
	       The expression must be terminated by a semicolon	(";").	If you
	       invoke find from	a shell	you may	need to	quote the semicolon if
	       the shell would otherwise treat it as a control	operator.   If
	       the string "{}" appears anywhere	in the utility name or the ar-
	       guments	it  is	replaced  by the pathname of the current file.
	       Utility will be executed	from the directory from	which find was
	       executed.  Utility and arguments	are not	subject	to the further
	       expansion of shell patterns and constructs.

       -exec utility [argument ...] {} +
	       Same as -exec, except that "{}" is replaced with	as many	 path-
	       names  as possible for each invocation of utility.  This	behav-
	       iour is similar to that of xargs(1).

       -execdir	utility	[argument ...] ;
	       The -execdir primary is identical to the	-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.

       -execdir	utility	[argument ...] {} +
	       Same  as	 -execdir,  except  that "{}" is replaced with as many
	       pathnames as possible for each invocation of utility.  This be-
	       haviour is similar to that of xargs(1).

       -flags [-|+]flags,notflags
	       The flags are specified using symbolic names (see  chflags(1)).
	       Those  with  the	 "no"  prefix (except "nodump")	are said to be
	       notflags.  Flags	in flags are checked to	be set,	and  flags  in
	       notflags	 are checked to	be not set.  Note that this is differ-
	       ent from	-perm, which only allows the user to specify mode bits
	       that are	set.

	       If flags	are preceded by	a dash ("-"), this  primary  evaluates
	       to  true	 if  at	least all of the bits in flags and none	of the
	       bits in notflags	are set	in the file's flags  bits.   If	 flags
	       are preceded by a plus ("+"), this primary evaluates to true if
	       any  of	the  bits in flags is set in the file's	flags bits, or
	       any of the bits in notflags is not  set	in  the	 file's	 flags
	       bits.  Otherwise, this primary evaluates	to true	if the bits in
	       flags  exactly  match  the  file's  flags bits, and none	of the
	       flags bits match	those of notflags.

       -fstype type
	       True if the file	is contained in	a file system  of  type	 type.
	       The sysctl(8) command can be used to find out the types of file
	       systems that are	available on the system:

		     sysctl vfs

	       In  addition, there are two pseudo-types, "local" and "rdonly".
	       The former matches any file system physically  mounted  on  the
	       system  where the find is being executed	and the	latter matches
	       any file	system which is	mounted	read-only.

       -gid gname
	       The same	thing as -group	gname for compatibility	with GNU find.
	       GNU find	imposes	a restriction that  gname  is  numeric,	 while
	       find(1) does not.

       -group gname
	       True  if	 the file belongs to the group gname.  If gname	is nu-
	       meric and there is no such group	name, then gname is treated as
	       a group ID.

       -ignore_readdir_race
	       This option is for GNU find compatibility and is	ignored.

       -ilname pattern
	       Like -lname, but	the match is case insensitive.	This is	a  GNU
	       find extension.

       -iname pattern
	       Like -name, but the match is case insensitive.

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

       -ipath pattern
	       Like -path, but the match is case insensitive.

       -iregex pattern
	       Like -regex, but	the match is case insensitive.

       -iwholename pattern
	       The same	thing as -ipath, for GNU find compatibility.

       -links n
	       True if the file	has n links.

       -lname pattern
	       Like  -name,  but the contents of the symbolic link are matched
	       instead of the file name.  This is a GNU	find extension.

       -ls     This primary always evaluates to	true.  The following  informa-
	       tion  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 spe-
	       cial file, the major and	minor numbers will  be	displayed  in-
	       stead  of  the  size in bytes.  If the file is a	symbolic link,
	       the pathname of the linked-to file will be  displayed  preceded
	       by   "->".   The	 format	 is  identical	to  that  produced  by
	       "ls -dgils".

       -maxdepth n
	       Always true; descend at most n directory	levels below the  com-
	       mand line arguments.  If	any -maxdepth primary is specified, it
	       applies	to the entire expression even if it would not normally
	       be evaluated.  "-maxdepth 0" limits the	whole  search  to  the
	       command line arguments.

       -mindepth n
	       Always  true;  do not apply any tests or	actions	at levels less
	       than n.	If any -mindepth primary is specified, it  applies  to
	       the  entire  expression even if it would	not normally be	evalu-
	       ated.  "-mindepth 1" processes all but the command  line	 argu-
	       ments.

       -mmin n
	       True  if	the difference between the file	last modification time
	       and the time find was started, rounded  up  to  the  next  full
	       minute, is n minutes.

       -mnewer file
	       Same as -newer.

       -mount  The same	thing as -xdev,	for GNU	find compatibility.

       -mtime n[smhdw]
	       If  no  units  are specified, this primary evaluates to true if
	       the difference between the file last modification time and  the
	       time  find was started, rounded up to the next full 24-hour pe-
	       riod, is	n 24-hour periods.

	       If units	are specified, this primary evaluates to true  if  the
	       difference between the file last	modification time and the time
	       find  was  started  is  exactly	n  units.  Please refer	to the
	       -atime primary description for information  on  supported  time
	       units.

       -name pattern
	       True  if	 the  last  component  of  the pathname	being examined
	       matches pattern.	 Special  shell	 pattern  matching  characters
	       ("[", "]", "*", and "?")	may be used as part of pattern.	 These
	       characters  may	be  matched explicitly by escaping them	with a
	       backslash ("\").

       -newer file
	       True if the current file	has a more  recent  last  modification
	       time than file.

       -newerXY	file
	       True  if	 the  current  file has	a more recent last access time
	       (X=a), inode creation time (X=B), change	time (X=c), or modifi-
	       cation time (X=m) than the last access time (Y=a),  inode  cre-
	       ation time (Y=B), change	time (Y=c), or modification time (Y=m)
	       of file.	 In addition, if Y=t, then file	is instead interpreted
	       as  a  direct  date  specification  of  the  form understood by
	       cvs(1).	Note that -newermm is equivalent to -newer.

       -nogroup
	       True if the file	belongs	to an unknown group.

       -noignore_readdir_race
	       This option is for GNU find compatibility and is	ignored.

       -noleaf
	       This option is for GNU find compatibility.  In GNU find it dis-
	       ables an	optimization not relevant to find(1),  so  it  is  ig-
	       nored.

       -nouser
	       True if the file	belongs	to an unknown user.

       -ok utility [argument ...] ;
	       The  -ok	primary	is identical to	the -exec primary with the ex-
	       ception that find requests user affirmation for	the  execution
	       of  the utility by printing a message to	the terminal and read-
	       ing a response.	If the response	is not affirmative (`y'	in the
	       "POSIX" locale),	the command is not executed and	the  value  of
	       the -ok expression is false.

       -okdir utility [argument	...] ;
	       The  -okdir  primary  is	identical to the -execdir primary with
	       the same	exception as described for the -ok primary.

       -path pattern
	       True if the pathname being examined matches  pattern.   Special
	       shell  pattern matching characters ("[",	"]", "*", and "?") may
	       be used as part of pattern.  These characters  may  be  matched
	       explicitly  by  escaping	 them with a backslash ("\").  Slashes
	       ("/") are treated as normal characters and do not  have	to  be
	       matched explicitly.

       -perm [-|+]mode
	       The mode	may be either symbolic (see chmod(1)) or an octal num-
	       ber.   If the mode is symbolic, a starting value	of zero	is as-
	       sumed and the mode sets or clears permissions without regard to
	       the process' file mode creation mask.  If the  mode  is	octal,
	       only  bits  07777  (S_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 pri-
	       mary  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	preceded by  a
	       plus  ("+"),  this primary evaluates to true if any of the bits
	       in the mode are set in the file's mode bits.   Otherwise,  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  This primary always evaluates to	true.  It prints the  pathname
	       of the current file to standard output.	If none	of -exec, -ls,
	       -print0,	or -ok is specified, the given expression shall	be ef-
	       fectively replaced by ( given expression	) -print.

       -print0
	       This  primary always evaluates to true.	It prints the pathname
	       of the current file to standard output, followed	 by  an	 ASCII
	       NUL character (character	code 0).

       -prune  This  primary  always evaluates to true.	 It causes find	to not
	       descend into the	current	file.  Note, the -prune	primary	has no
	       effect if the -d	option was specified.

       -regex pattern
	       True if the whole path of the file matches pattern using	 regu-
	       lar  expression.	  To match a file named	"./foo/xyzzy", you can
	       use the regular expression ".*/[xyz]*" or ".*/foo/.*", but  not
	       "xyzzy" or "/foo/".

       -samefile name
	       True if the file	is a hard link to name.	 If the	command	option
	       -L is specified,	it is also true	if the file is a symbolic link
	       and points to name.

       -size n[ckMGTP]
	       True  if	 the file's size, rounded up, in 512-byte blocks is n.
	       If n is followed	by a c,	then the primary is true if the	file's
	       size is n bytes (characters).  Similarly	if n is	followed by  a
	       scale  indicator	 then  the file's size is compared to n	scaled
	       as:

	       k       kilobytes (1024 bytes)
	       M       megabytes (1024 kilobytes)
	       G       gigabytes (1024 megabytes)
	       T       terabytes (1024 gigabytes)
	       P       petabytes (1024 terabytes)

       -type t
	       True if the file	is of the specified type.  Possible file types
	       are as follows:

	       b       block special
	       c       character special
	       d       directory
	       f       regular file
	       l       symbolic	link
	       p       FIFO
	       s       socket

       -uid uname
	       The same	thing as -user uname for compatibility with GNU	 find.
	       GNU  find  imposes  a  restriction that uname is	numeric, while
	       find(1) does not.

       -user uname
	       True if the file	belongs	to the user uname.  If	uname  is  nu-
	       meric  and there	is no such user	name, then uname is treated as
	       a user ID.

       -wholename pattern
	       The same	thing as -path,	for GNU	find compatibility.

       All primaries which take	a numeric argument allow the number to be pre-
       ceded 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".

OPERATORS
       The primaries may be combined using the following operators.  The oper-
       ators are listed	in order of decreasing precedence.

       ( expression )
	       This evaluates to true if the parenthesized  expression	evalu-
	       ates to true.

       ! expression
       -not expression
	       This  is	 the  unary NOT	operator.  It evaluates	to true	if the
	       expression is false.

       -false  Always false.
       -true   Always true.

       expression -and expression
       expression expression
	       The -and	operator is the	logical	AND operator.  As  it  is  im-
	       plied  by the juxtaposition of two expressions it does not have
	       to be specified.	 The expression	evaluates to true if both  ex-
	       pressions  are true.  The second	expression is not evaluated if
	       the first expression is false.

       expression -or expression
	       The -or operator	is the logical 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.

       All  operands  and  primaries must be separate arguments	to find.  Pri-
       maries which themselves take arguments expect each  argument  to	 be  a
       separate	argument to find.

ENVIRONMENT
       The  LANG,  LC_ALL, LC_COLLATE, LC_CTYPE, LC_MESSAGES and LC_TIME envi-
       ronment variables affect	the execution of the find utility as described
       in environ(7).

EXAMPLES
       The following examples are shown	as given to the	shell:

       find / \! -name "*.c" -print
	       Print out a list	of all the files whose names do	not end	in .c.

       find / -newer ttt -user wnj -print
	       Print out a list	of all the files owned by user "wnj" that  are
	       newer than the file ttt.

       find / \! \( -newer ttt -user wnj \) -print
	       Print out a list	of all the files which are not both newer than
	       ttt and owned by	"wnj".

       find / \( -newer	ttt -or	-user wnj \) -print
	       Print  out  a  list  of	all the	files that are either owned by
	       "wnj" or	that are newer than ttt.

       find / -newerct '1 minute ago' -print
	       Print out a list	of all the files whose inode  change  time  is
	       more recent than	the current time minus one minute.

       find / -type f -exec echo {} \;
	       Use the echo(1) command to print	out a list of all the files.

       find -L /usr/ports/packages -type l -exec rm -- {} +
	       Delete all broken symbolic links	in /usr/ports/packages.

       find /usr/src -name CVS -prune -o -depth	+6 -print
	       Find  files and directories that	are at least seven levels deep
	       in the working directory	/usr/src.

       find /usr/src -name CVS -prune -o -mindepth 7 -print
	       Is not equivalent to the	previous example, since	-prune is  not
	       evaluated below level seven.

COMPATIBILITY
       The  -follow  primary  is  deprecated; the -L option should be used in-
       stead.  See the "STANDARDS" section below for details.

SEE ALSO
       chflags(1),  chmod(1),	cvs(1),	  locate(1),   whereis(1),   which(1),
       xargs(1),    stat(2),   acl(3),	 fts(3),   getgrent(3),	  getpwent(3),
       strmode(3), re_format(7), symlink(7)

STANDARDS
       The find	utility	syntax is a superset of	the syntax  specified  by  the
       IEEE Std	1003.1-2001 ("POSIX.1")	standard.

       All  the	 single	 character  options except -H and -L as	well as	-amin,
       -anewer,	-cmin,	-cnewer,  -delete,  -empty,  -fstype,  -iname,	-inum,
       -iregex,	 -ls,  -maxdepth, -mindepth, -mmin, -path, -print0, -regex and
       all of the -B* birthtime	related	primaries are extensions to  IEEE  Std
       1003.1-2001 ("POSIX.1").

       Historically, the -d, -L	and -x options were implemented	using the pri-
       maries -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	evalu-
       ates to true, the standard order	 of  evaluation	 implies  that	-depth
       would never be evaluated.  This is not the case.

       The  operator  -or was implemented as -o, and the operator -and was im-
       plemented as -a.

       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 re-
       places it no matter where in the	utility	name or	arguments it appears.

       The -E option was inspired by the equivalent  grep(1)  and  sed(1)  op-
       tions.

HISTORY
       A find command appeared in Version 1 AT&T UNIX.

BUGS
       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  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.

       The -delete primary does	not interact  well  with  other	 options  that
       cause the file system tree traversal options to be changed.

       The  -mindepth  and -maxdepth primaries are actually global options (as
       documented above).  They	should probably	be replaced by	options	 which
       look like options.

FreeBSD	8.2		       February	24, 2008		       FIND(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=find&manpath=FreeBSD+8.2-RELEASE>

home | help