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	pathname] [pathname ...] expression

DESCRIPTION
       The  find  utility  recursively	descends  the  directory tree for each
       pathname	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
	       options 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.

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

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

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

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

       -depth  Always true; same as the	-d option.  -depth can be useful  when
	       find  is	 used with cpio(1) to process files that are contained
	       in directories with unusual permissions.	 It ensures  that  you
	       have  write  permission while you are placing files in a	direc-
	       tory, then sets the directory's permissions as the last thing.

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

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

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

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

       -links n
	       True if the file	has n links.

       -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
	       True if the depth of the	current	file into  the	tree  is  less
	       than or equal to	n.

       -mindepth n
	       True  if	the depth of the current file into the tree is greater
	       than or equal to	n.

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

       -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),  change  time (X=c), or modification time	(X=m) than the
	       last access time	(Y=a), change time (Y=c), or modification time
	       (Y=m) of	file.  In addition, if Y=t, then file is  instead  in-
	       terpreted 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.

       -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 other than "y" 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/".

       -size n[c]
	       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).

       -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

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

       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
		       evaluates to true.

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

       expression -and expression
       expression expression
		       The -and	operator is the	logical	AND operator.	As  it
		       is  implied  by the juxtaposition of two	expressions it
		       does not	have to	be specified.  The  expression	evalu-
		       ates  to	true if	both expressions 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 ex-
		       pression	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.

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.

SEE ALSO
       chflags(1),   chmod(1),	 cvs(1),   locate(1),	whereis(1),  which(1),
       xargs(1),  stat(2),  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.2 ("POSIX.2") standard.

       All the single character	options	as well	as the -iname, -inum, -iregex,
       -print0,	-delete, -ls, and -regex primaries are extensions to IEEE  Std
       1003.2 ("POSIX.2").

       Historically, the -d, -h	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 implemented on	the analogy of grep(1) and sed(1).

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.

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

FreeBSD	5.2.1			  May 3, 2001			       FIND(1)

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

home | help