xref: /freebsd/usr.bin/find/find.1 (revision f856af0466c076beef4ea9b15d088e1119a945b8)
1.\" Copyright (c) 1990, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" This code is derived from software contributed to Berkeley by
5.\" the Institute of Electrical and Electronics Engineers, Inc.
6.\"
7.\" Redistribution and use in source and binary forms, with or without
8.\" modification, are permitted provided that the following conditions
9.\" are met:
10.\" 1. Redistributions of source code must retain the above copyright
11.\"    notice, this list of conditions and the following disclaimer.
12.\" 2. Redistributions in binary form must reproduce the above copyright
13.\"    notice, this list of conditions and the following disclaimer in the
14.\"    documentation and/or other materials provided with the distribution.
15.\" 3. All advertising materials mentioning features or use of this software
16.\"    must display the following acknowledgement:
17.\"	This product includes software developed by the University of
18.\"	California, Berkeley and its contributors.
19.\" 4. Neither the name of the University nor the names of its contributors
20.\"    may be used to endorse or promote products derived from this software
21.\"    without specific prior written permission.
22.\"
23.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33.\" SUCH DAMAGE.
34.\"
35.\"	@(#)find.1	8.7 (Berkeley) 5/9/95
36.\" $FreeBSD$
37.\"
38.Dd December 13, 2006
39.Dt FIND 1
40.Os
41.Sh NAME
42.Nm find
43.Nd walk a file hierarchy
44.Sh SYNOPSIS
45.Nm
46.Op Fl H | Fl L | Fl P
47.Op Fl EXdsx
48.Op Fl f Ar pathname
49.Ar pathname ...
50.Ar expression
51.Nm
52.Op Fl H | Fl L | Fl P
53.Op Fl EXdsx
54.Fl f Ar pathname
55.Op Ar pathname ...
56.Ar expression
57.Sh DESCRIPTION
58The
59.Nm
60utility recursively descends the directory tree for each
61.Ar pathname
62listed, evaluating an
63.Ar expression
64(composed of the
65.Dq primaries
66and
67.Dq operands
68listed below) in terms
69of each file in the tree.
70.Pp
71The options are as follows:
72.Bl -tag -width indent
73.It Fl E
74Interpret regular expressions followed by
75.Ic -regex
76and
77.Ic -iregex
78options as extended (modern) regular expressions rather than basic
79regular expressions (BRE's).
80The
81.Xr re_format 7
82manual page fully describes both formats.
83.It Fl H
84Cause the file information and file type (see
85.Xr stat 2 )
86returned for each symbolic link specified on the command line to be
87those of the file referenced by the link, not the link itself.
88If the referenced file does not exist, the file information and type will
89be for the link itself.
90File information of all symbolic links not on
91the command line is that of the link itself.
92.It Fl L
93Cause the file information and file type (see
94.Xr stat 2 )
95returned for each symbolic link to be those of the file referenced by the
96link, not the link itself.
97If the referenced file does not exist, the file information and type will
98be for the link itself.
99.Pp
100This option is equivalent to the deprecated
101.Ic -follow
102primary.
103.It Fl P
104Cause the file information and file type (see
105.Xr stat 2 )
106returned for each symbolic link to be those of the link itself.
107This is the default.
108.It Fl X
109Permit
110.Nm
111to be safely used in conjunction with
112.Xr xargs 1 .
113If a file name contains any of the delimiting characters used by
114.Xr xargs 1 ,
115a diagnostic message is displayed on standard error, and the file
116is skipped.
117The delimiting characters include single
118.Pq Dq Li " ' "
119and double
120.Pq Dq Li " \*q "
121quotes, backslash
122.Pq Dq Li \e ,
123space, tab and newline characters.
124.Pp
125However, you may wish to consider the
126.Fl print0
127primary in conjunction with
128.Dq Nm xargs Fl 0
129as an effective alternative.
130.It Fl d
131Cause
132.Nm
133to perform a depth-first traversal, i.e., directories
134are visited in post-order and all entries in a directory will be acted
135on before the directory itself.
136By default,
137.Nm
138visits directories in pre-order, i.e., before their contents.
139Note, the default is
140.Em not
141a breadth-first traversal.
142.Pp
143This option is equivalent to the
144.Ic -depth
145primary of
146.St -p1003.1-2001 .
147.Fl d
148can be useful when
149.Nm
150is used with
151.Xr cpio 1
152to process files that are contained in directories with unusual permissions.
153It ensures that you have write permission while you are placing files in a
154directory, then sets the directory's permissions as the last thing.
155.It Fl f
156Specify a file hierarchy for
157.Nm
158to traverse.
159File hierarchies may also be specified as the operands immediately
160following the options.
161.It Fl s
162Cause
163.Nm
164to traverse the file hierarchies in lexicographical order,
165i.e., alphabetical order within each directory.
166Note:
167.Ql find -s
168and
169.Ql "find | sort"
170may give different results.
171.It Fl x
172Prevent
173.Nm
174from descending into directories that have a device number different
175than that of the file from which the descent began.
176.Pp
177This option is equivalent to the deprecated
178.Ic -xdev
179primary.
180.El
181.Sh PRIMARIES
182.Bl -tag -width indent
183.It Ic -Bmin Ar n
184True if the difference between the time of a file's inode creation
185and the time
186.Nm
187was started, rounded up to the next full minute, is
188.Ar n
189minutes.
190.It Ic -Bnewer Ar file
191Same as
192.Ic -newerBm .
193.It Ic -Btime Ar n Ns Op Cm smhdw
194If no units are specified, this primary evaluates to
195true if the difference between the time of a file's inode creation
196and the time
197.Nm
198was started, rounded up to the next full 24-hour period, is
199.Ar n
20024-hour periods.
201.Pp
202If units are specified, this primary evaluates to
203true if the difference between the time of a file's inode creation
204and the time
205.Nm
206was started is exactly
207.Ar n
208units.
209Please refer to the
210.Ic -atime
211primary description for information on supported time units.
212.It Ic -acl
213May be used in conjunction with other options to locate
214files with extended ACLs.
215See
216.Xr acl 3
217for more information.
218.It Ic -amin Ar n
219True if the difference between the file last access time and the time
220.Nm
221was started, rounded up to the next full minute, is
222.Ar n
223minutes.
224.It Ic -anewer Ar file
225Same as
226.Ic -neweram .
227.It Ic -atime Ar n Ns Op Cm smhdw
228If no units are specified, this primary evaluates to
229true if the difference between the file last access time and the time
230.Nm
231was started, rounded up to the next full 24-hour period, is
232.Ar n
23324-hour periods.
234.Pp
235If units are specified, this primary evaluates to
236true if the difference between the file last access time and the time
237.Nm
238was started is exactly
239.Ar n
240units.
241Possible time units are as follows:
242.Pp
243.Bl -tag -width indent -compact
244.It Cm s
245second
246.It Cm m
247minute (60 seconds)
248.It Cm h
249hour (60 minutes)
250.It Cm d
251day (24 hours)
252.It Cm w
253week (7 days)
254.El
255.Pp
256Any number of units may be combined in one
257.Ic -atime
258argument, for example,
259.Dq Li "-atime -1h30m" .
260Units are probably only useful when used in conjunction with the
261.Cm +
262or
263.Cm -
264modifier.
265.It Ic -cmin Ar n
266True if the difference between the time of last change of file status
267information and the time
268.Nm
269was started, rounded up to the next full minute, is
270.Ar n
271minutes.
272.It Ic -cnewer Ar file
273Same as
274.Ic -newercm .
275.It Ic -ctime Ar n Ns Op Cm smhdw
276If no units are specified, this primary evaluates to
277true if the difference between the time of last change of file status
278information and the time
279.Nm
280was started, rounded up to the next full 24-hour period, is
281.Ar n
28224-hour periods.
283.Pp
284If units are specified, this primary evaluates to
285true if the difference between the time of last change of file status
286information and the time
287.Nm
288was started is exactly
289.Ar n
290units.
291Please refer to the
292.Ic -atime
293primary description for information on supported time units.
294.It Ic -delete
295Delete found files and/or directories.
296Always returns true.
297This executes
298from the current working directory as
299.Nm
300recurses down the tree.
301It will not attempt to delete a filename with a
302.Dq Pa /
303character in its pathname relative to
304.Dq Pa \&.
305for security reasons.
306Depth-first traversal processing is implied by this option.
307.It Ic -depth
308Always true;
309same as the
310.Fl d
311option.
312.It Ic -depth Ar n
313True if the depth of the file relative to the starting point of the traversal
314is
315.Ar n .
316.It Ic -empty
317True if the current file or directory is empty.
318.It Ic -exec Ar utility Oo Ar argument ... Oc Li \&;
319True if the program named
320.Ar utility
321returns a zero value as its exit status.
322Optional
323.Ar arguments
324may be passed to the utility.
325The expression must be terminated by a semicolon
326.Pq Dq Li \&; .
327If you invoke
328.Nm
329from a shell you may need to quote the semicolon if the shell would
330otherwise treat it as a control operator.
331If the string
332.Dq Li {}
333appears anywhere in the utility name or the
334arguments it is replaced by the pathname of the current file.
335.Ar Utility
336will be executed from the directory from which
337.Nm
338was executed.
339.Ar Utility
340and
341.Ar arguments
342are not subject to the further expansion of shell patterns
343and constructs.
344.It Ic -exec Ar utility Oo Ar argument ... Oc Li {} +
345Same as
346.Ic -exec ,
347except that
348.Dq Li {}
349is replaced with as many pathnames as possible for each invocation of
350.Ar utility .
351This behaviour is similar to that of
352.Xr xargs 1 .
353.It Ic -execdir Ar utility Oo Ar argument ... Oc Li \&;
354The
355.Ic -execdir
356primary is identical to the
357.Ic -exec
358primary with the exception that
359.Ar utility
360will be executed from the directory that holds
361the current file.
362The filename substituted for
363the string
364.Dq Li {}
365is not qualified.
366.It Ic -flags Oo Cm - Ns | Ns Cm + Oc Ns Ar flags , Ns Ar notflags
367The flags are specified using symbolic names (see
368.Xr chflags 1 ) .
369Those with the
370.Qq Li no
371prefix (except
372.Qq Li nodump )
373are said to be
374.Ar notflags .
375Flags in
376.Ar flags
377are checked to be set, and flags in
378.Ar notflags
379are checked to be not set.
380Note that this is different from
381.Ic -perm ,
382which only allows the user to specify mode bits that are set.
383.Pp
384If flags are preceded by a dash
385.Pq Dq Li - ,
386this primary evaluates to true
387if at least all of the bits in
388.Ar flags
389and none of the bits in
390.Ar notflags
391are set in the file's flags bits.
392If flags are preceded by a plus
393.Pq Dq Li + ,
394this primary evaluates to true
395if any of the bits in
396.Ar flags
397is set in the file's flags bits,
398or any of the bits in
399.Ar notflags
400is not set in the file's flags bits.
401Otherwise,
402this primary evaluates to true
403if the bits in
404.Ar flags
405exactly match the file's flags bits,
406and none of the
407.Ar flags
408bits match those of
409.Ar notflags .
410.It Ic -fstype Ar type
411True if the file is contained in a file system of type
412.Ar type .
413The
414.Xr sysctl 8
415command can be used to find out the types of file systems
416that are available on the system:
417.Pp
418.Dl "sysctl vfs"
419.Pp
420In addition, there are two pseudo-types,
421.Dq Li local
422and
423.Dq Li rdonly .
424The former matches any file system physically mounted on the system where
425the
426.Nm
427is being executed and the latter matches any file system which is
428mounted read-only.
429.It Ic -group Ar gname
430True if the file belongs to the group
431.Ar gname .
432If
433.Ar gname
434is numeric and there is no such group name, then
435.Ar gname
436is treated as a group ID.
437.It Ic -iname Ar pattern
438Like
439.Ic -name ,
440but the match is case insensitive.
441.It Ic -inum Ar n
442True if the file has inode number
443.Ar n .
444.It Ic -ipath Ar pattern
445Like
446.Ic -path ,
447but the match is case insensitive.
448.It Ic -iregex Ar pattern
449Like
450.Ic -regex ,
451but the match is case insensitive.
452.It Ic -links Ar n
453True if the file has
454.Ar n
455links.
456.It Ic -ls
457This primary always evaluates to true.
458The following information for the current file is written to standard output:
459its inode number, size in 512-byte blocks, file permissions, number of hard
460links, owner, group, size in bytes, last modification time, and pathname.
461If the file is a block or character special file, the major and minor numbers
462will be displayed instead of the size in bytes.
463If the file is a symbolic link, the pathname of the linked-to file will be
464displayed preceded by
465.Dq Li -> .
466The format is identical to that produced by
467.Bk -words
468.Nm ls Fl dgils .
469.Ek
470.It Ic -maxdepth Ar n
471Always true; descend at most
472.Ar n
473directory levels below the command line arguments.
474If any
475.Ic -maxdepth
476primary is specified, it applies to the entire expression even if it would
477not normally be evaluated.
478.Ic -maxdepth Li 0
479limits the whole search to the command line arguments.
480.It Ic -mindepth Ar n
481Always true; do not apply any tests or actions at levels less than
482.Ar n .
483If any
484.Ic -mindepth
485primary is specified, it applies to the entire expression even if it would
486not normally be evaluated.
487.Ic -mindepth Li 1
488processes all but the command line arguments.
489.It Ic -mmin Ar n
490True if the difference between the file last modification time and the time
491.Nm
492was started, rounded up to the next full minute, is
493.Ar n
494minutes.
495.It Ic -mnewer Ar file
496Same as
497.Ic -newer .
498.It Ic -mtime Ar n Ns Op Cm smhdw
499If no units are specified, this primary evaluates to
500true if the difference between the file last modification time and the time
501.Nm
502was started, rounded up to the next full 24-hour period, is
503.Ar n
50424-hour periods.
505.Pp
506If units are specified, this primary evaluates to
507true if the difference between the file last modification time and the time
508.Nm
509was started is exactly
510.Ar n
511units.
512Please refer to the
513.Ic -atime
514primary description for information on supported time units.
515.It Ic -name Ar pattern
516True if the last component of the pathname being examined matches
517.Ar pattern .
518Special shell pattern matching characters
519.Dq ( Li \&[ ,
520.Dq Li \&] ,
521.Dq Li * ,
522and
523.Dq Li \&? )
524may be used as part of
525.Ar pattern .
526These characters may be matched explicitly by escaping them with a
527backslash
528.Pq Dq Li \e .
529.It Ic -newer Ar file
530True if the current file has a more recent last modification time than
531.Ar file .
532.It Ic -newer Ns Ar X Ns Ar Y Ar file
533True if the current file has a more recent last access time
534.Ar ( X Ns = Ns Cm a ) ,
535inode creation time
536.Ar ( X Ns = Ns Cm B ) ,
537change time
538.Ar ( X Ns = Ns Cm c ) ,
539or modification time
540.Ar ( X Ns = Ns Cm m )
541than the last access time
542.Ar ( Y Ns = Ns Cm a ) ,
543inode creation time
544.Ar ( Y Ns = Ns Cm B ) ,
545change time
546.Ar ( Y Ns = Ns Cm c ) ,
547or modification time
548.Ar ( Y Ns = Ns Cm m )
549of
550.Ar file .
551In addition, if
552.Ar Y Ns = Ns Cm t ,
553then
554.Ar file
555is instead interpreted as a direct date specification of the form
556understood by
557.Xr cvs 1 .
558Note that
559.Ic -newermm
560is equivalent to
561.Ic -newer .
562.It Ic -nogroup
563True if the file belongs to an unknown group.
564.It Ic -nouser
565True if the file belongs to an unknown user.
566.It Ic -ok Ar utility Oo Ar argument ... Oc Li \&;
567The
568.Ic -ok
569primary is identical to the
570.Ic -exec
571primary with the exception that
572.Nm
573requests user affirmation for the execution of the
574.Ar utility
575by printing
576a message to the terminal and reading a response.
577If the response is not affirmative
578.Ql ( y
579in the
580.Dq Li POSIX
581locale),
582the command is not executed and the
583value of the
584.Ic -ok
585expression is false.
586.It Ic -okdir Ar utility Oo Ar argument ... Oc Li \&;
587The
588.Ic -okdir
589primary is identical to the
590.Ic -execdir
591primary with the same exception as described for the
592.Ic -ok
593primary.
594.It Ic -path Ar pattern
595True if the pathname being examined matches
596.Ar pattern .
597Special shell pattern matching characters
598.Dq ( Li \&[ ,
599.Dq Li \&] ,
600.Dq Li * ,
601and
602.Dq Li \&? )
603may be used as part of
604.Ar pattern .
605These characters may be matched explicitly by escaping them with a
606backslash
607.Pq Dq Li \e .
608Slashes
609.Pq Dq Li /
610are treated as normal characters and do not have to be
611matched explicitly.
612.It Ic -perm Oo Cm - Ns | Ns Cm + Oc Ns Ar mode
613The
614.Ar mode
615may be either symbolic (see
616.Xr chmod 1 )
617or an octal number.
618If the
619.Ar mode
620is symbolic, a starting value of zero is assumed and the
621.Ar mode
622sets or clears permissions without regard to the process' file mode
623creation mask.
624If the
625.Ar mode
626is octal, only bits 07777
627.Pq Dv S_ISUID | S_ISGID | S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO
628of the file's mode bits participate
629in the comparison.
630If the
631.Ar mode
632is preceded by a dash
633.Pq Dq Li - ,
634this primary evaluates to true
635if at least all of the bits in the
636.Ar mode
637are set in the file's mode bits.
638If the
639.Ar mode
640is preceded by a plus
641.Pq Dq Li + ,
642this primary evaluates to true
643if any of the bits in the
644.Ar mode
645are set in the file's mode bits.
646Otherwise, this primary evaluates to true if
647the bits in the
648.Ar mode
649exactly match the file's mode bits.
650Note, the first character of a symbolic mode may not be a dash
651.Pq Dq Li - .
652.It Ic -print
653This primary always evaluates to true.
654It prints the pathname of the current file to standard output.
655If none of
656.Ic -exec , -ls , -print0 ,
657or
658.Ic -ok
659is specified, the given expression shall be effectively replaced by
660.Cm \&( Ar "given expression" Cm \&) Ic -print .
661.It Ic -print0
662This primary always evaluates to true.
663It prints the pathname of the current file to standard output, followed by an
664.Tn ASCII
665.Dv NUL
666character (character code 0).
667.It Ic -prune
668This primary always evaluates to true.
669It causes
670.Nm
671to not descend into the current file.
672Note, the
673.Ic -prune
674primary has no effect if the
675.Fl d
676option was specified.
677.It Ic -regex Ar pattern
678True if the whole path of the file matches
679.Ar pattern
680using regular expression.
681To match a file named
682.Dq Pa ./foo/xyzzy ,
683you can use the regular expression
684.Dq Li ".*/[xyz]*"
685or
686.Dq Li ".*/foo/.*" ,
687but not
688.Dq Li xyzzy
689or
690.Dq Li /foo/ .
691.It Ic -size Ar n Ns Op Cm ckMGTP
692True if the file's size, rounded up, in 512-byte blocks is
693.Ar n .
694If
695.Ar n
696is followed by a
697.Cm c ,
698then the primary is true if the
699file's size is
700.Ar n
701bytes (characters).
702Similarly if
703.Ar n
704is followed by a scale indicator then the file's size is compared to
705.Ar n
706scaled as:
707.Pp
708.Bl -tag -width indent -compact
709.It Cm k
710kilobytes (1024 bytes)
711.It Cm M
712megabytes (1024 kilobytes)
713.It Cm G
714gigabytes (1024 megabytes)
715.It Cm T
716terabytes (1024 gigabytes)
717.It Cm P
718petabytes (1024 terabytes)
719.El
720.Pp
721.It Ic -type Ar t
722True if the file is of the specified type.
723Possible file types are as follows:
724.Pp
725.Bl -tag -width indent -compact
726.It Cm b
727block special
728.It Cm c
729character special
730.It Cm d
731directory
732.It Cm f
733regular file
734.It Cm l
735symbolic link
736.It Cm p
737FIFO
738.It Cm s
739socket
740.El
741.It Ic -user Ar uname
742True if the file belongs to the user
743.Ar uname .
744If
745.Ar uname
746is numeric and there is no such user name, then
747.Ar uname
748is treated as a user ID.
749.El
750.Pp
751All primaries which take a numeric argument allow the number to be
752preceded by a plus sign
753.Pq Dq Li +
754or a minus sign
755.Pq Dq Li - .
756A preceding plus sign means
757.Dq more than n ,
758a preceding minus sign means
759.Dq less than n
760and neither means
761.Dq exactly n .
762.Sh OPERATORS
763The primaries may be combined using the following operators.
764The operators are listed in order of decreasing precedence.
765.Pp
766.Bl -tag -width "( expression )" -compact
767.It Cm \&( Ar expression Cm \&)
768This evaluates to true if the parenthesized expression evaluates to
769true.
770.Pp
771.It Cm \&! Ar expression
772.It Cm -false Ar expression
773.It Cm -not Ar expression
774This is the unary
775.Tn NOT
776operator.
777It evaluates to true if the expression is false.
778.Pp
779.It Ar expression Cm -and Ar expression
780.It Ar expression expression
781The
782.Cm -and
783operator is the logical
784.Tn AND
785operator.
786As it is implied by the juxtaposition of two expressions it does not
787have to be specified.
788The expression evaluates to true if both expressions are true.
789The second expression is not evaluated if the first expression is false.
790.Pp
791.It Ar expression Cm -or Ar expression
792The
793.Cm -or
794operator is the logical
795.Tn OR
796operator.
797The expression evaluates to true if either the first or the second expression
798is true.
799The second expression is not evaluated if the first expression is true.
800.El
801.Pp
802All operands and primaries must be separate arguments to
803.Nm .
804Primaries which themselves take arguments expect each argument
805to be a separate argument to
806.Nm .
807.Sh ENVIRONMENT
808The
809.Ev LANG , LC_ALL , LC_COLLATE , LC_CTYPE , LC_MESSAGES
810and
811.Ev LC_TIME
812environment variables affect the execution of the
813.Nm
814utility as described in
815.Xr environ 7 .
816.Sh EXAMPLES
817The following examples are shown as given to the shell:
818.Bl -tag -width indent
819.It Li "find / \e! -name \*q*.c\*q -print"
820Print out a list of all the files whose names do not end in
821.Pa .c .
822.It Li "find / -newer ttt -user wnj -print"
823Print out a list of all the files owned by user
824.Dq wnj
825that are newer
826than the file
827.Pa ttt .
828.It Li "find / \e! \e( -newer ttt -user wnj \e) -print"
829Print out a list of all the files which are not both newer than
830.Pa ttt
831and owned by
832.Dq wnj .
833.It Li "find / \e( -newer ttt -or -user wnj \e) -print"
834Print out a list of all the files that are either owned by
835.Dq wnj
836or that are newer than
837.Pa ttt .
838.It Li "find / -newerct '1 minute ago' -print"
839Print out a list of all the files whose inode change time is more
840recent than the current time minus one minute.
841.It Li "find / -type f -exec echo {} \e;"
842Use the
843.Xr echo 1
844command to print out a list of all the files.
845.It Li "find -L /usr/ports/packages -type l -delete"
846Delete all broken symbolic links in
847.Pa /usr/ports/packages .
848.It Li "find /usr/src -name CVS -prune -o -depth +6 -print"
849Find files and directories that are at least seven levels deep
850in the working directory
851.Pa /usr/src .
852.It Li "find /usr/src -name CVS -prune -o -mindepth 7 -print"
853Is not equivalent to the previous example, since
854.Ic -prune
855is not evaluated below level seven.
856.El
857.Sh COMPATIBILITY
858The
859.Ic -follow
860primary is deprecated; the
861.Fl L
862option should be used instead.
863See the
864.Sx STANDARDS
865section below for details.
866.Sh SEE ALSO
867.Xr chflags 1 ,
868.Xr chmod 1 ,
869.Xr cvs 1 ,
870.Xr locate 1 ,
871.Xr whereis 1 ,
872.Xr which 1 ,
873.Xr xargs 1 ,
874.Xr stat 2 ,
875.Xr acl 3 ,
876.Xr fts 3 ,
877.Xr getgrent 3 ,
878.Xr getpwent 3 ,
879.Xr strmode 3 ,
880.Xr re_format 7 ,
881.Xr symlink 7
882.Sh STANDARDS
883The
884.Nm
885utility syntax is a superset of the syntax specified by the
886.St -p1003.1-2001
887standard.
888.Pp
889All the single character options except
890.Ic -H
891and
892.Ic -L
893as well as
894.Ic -amin , -anewer , -cmin , -cnewer , -delete , -empty , -fstype ,
895.Ic -iname , -inum , -iregex , -ls , -maxdepth , -mindepth , -mmin ,
896.Ic -path , -print0 , -regex
897and all of the
898.Ic -B
899birthtime related primaries are extensions to
900.St -p1003.1-2001 .
901.Pp
902Historically, the
903.Fl d , L
904and
905.Fl x
906options were implemented using the primaries
907.Ic -depth , -follow ,
908and
909.Ic -xdev .
910These primaries always evaluated to true.
911As they were really global variables that took effect before the traversal
912began, some legal expressions could have unexpected results.
913An example is the expression
914.Ic -print Cm -o Ic -depth .
915As
916.Ic -print
917always evaluates to true, the standard order of evaluation
918implies that
919.Ic -depth
920would never be evaluated.
921This is not the case.
922.Pp
923The operator
924.Cm -or
925was implemented as
926.Cm -o ,
927and the operator
928.Cm -and
929was implemented as
930.Cm -a .
931.Pp
932Historic implementations of the
933.Ic -exec
934and
935.Ic -ok
936primaries did not replace the string
937.Dq Li {}
938in the utility name or the
939utility arguments if it had preceding or following non-whitespace characters.
940This version replaces it no matter where in the utility name or arguments
941it appears.
942.Pp
943The
944.Fl E
945option was inspired by the equivalent
946.Xr grep 1
947and
948.Xr sed 1
949options.
950.Sh HISTORY
951A
952.Nm
953command appeared in
954.At v1 .
955.Sh BUGS
956The special characters used by
957.Nm
958are also special characters to many shell programs.
959In particular, the characters
960.Dq Li * ,
961.Dq Li \&[ ,
962.Dq Li \&] ,
963.Dq Li \&? ,
964.Dq Li \&( ,
965.Dq Li \&) ,
966.Dq Li \&! ,
967.Dq Li \e
968and
969.Dq Li \&;
970may have to be escaped from the shell.
971.Pp
972As there is no delimiter separating options and file names or file
973names and the
974.Ar expression ,
975it is difficult to specify files named
976.Pa -xdev
977or
978.Pa \&! .
979These problems are handled by the
980.Fl f
981option and the
982.Xr getopt 3
983.Dq Fl Fl
984construct.
985.Pp
986The
987.Ic -delete
988primary does not interact well with other options that cause the file system
989tree traversal options to be changed.
990.Pp
991The
992.Ic -mindepth
993and
994.Ic -maxdepth
995primaries are actually global options (as documented above).
996They should
997probably be replaced by options which look like options.
998