xref: /freebsd/usr.bin/find/find.1 (revision 82431678fce5c893ef9c7418ad6d998ad4187de6)
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 February 24, 2008
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 path
49.Ar path ...
50.Op Ar expression
51.Nm
52.Op Fl H | Fl L | Fl P
53.Op Fl EXdsx
54.Fl f Ar path
55.Op Ar path ...
56.Op Ar expression
57.Sh DESCRIPTION
58The
59.Nm
60utility recursively descends the directory tree for each
61.Ar path
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
78primaries 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 .
147The
148.Fl d
149option
150can be useful when
151.Nm
152is used with
153.Xr cpio 1
154to process files that are contained in directories with unusual permissions.
155It ensures that you have write permission while you are placing files in a
156directory, then sets the directory's permissions as the last thing.
157.It Fl f
158Specify a file hierarchy for
159.Nm
160to traverse.
161File hierarchies may also be specified as the operands immediately
162following the options.
163.It Fl s
164Cause
165.Nm
166to traverse the file hierarchies in lexicographical order,
167i.e., alphabetical order within each directory.
168Note:
169.Ql find -s
170and
171.Ql "find | sort"
172may give different results.
173.It Fl x
174Prevent
175.Nm
176from descending into directories that have a device number different
177than that of the file from which the descent began.
178.Pp
179This option is equivalent to the deprecated
180.Ic -xdev
181primary.
182.El
183.Sh PRIMARIES
184.Bl -tag -width indent
185.It Ic -Bmin Ar n
186True if the difference between the time of a file's inode creation
187and the time
188.Nm
189was started, rounded up to the next full minute, is
190.Ar n
191minutes.
192.It Ic -Bnewer Ar file
193Same as
194.Ic -newerBm .
195.It Ic -Btime Ar n Ns Op Cm smhdw
196If no units are specified, this primary evaluates to
197true if the difference between the time of a file's inode creation
198and the time
199.Nm
200was started, rounded up to the next full 24-hour period, is
201.Ar n
20224-hour periods.
203.Pp
204If units are specified, this primary evaluates to
205true if the difference between the time of a file's inode creation
206and the time
207.Nm
208was started is exactly
209.Ar n
210units.
211Please refer to the
212.Ic -atime
213primary description for information on supported time units.
214.It Ic -acl
215May be used in conjunction with other primaries to locate
216files with extended ACLs.
217See
218.Xr acl 3
219for more information.
220.It Ic -amin Ar n
221True if the difference between the file last access time and the time
222.Nm
223was started, rounded up to the next full minute, is
224.Ar n
225minutes.
226.It Ic -anewer Ar file
227Same as
228.Ic -neweram .
229.It Ic -atime Ar n Ns Op Cm smhdw
230If no units are specified, this primary evaluates to
231true if the difference between the file last access time and the time
232.Nm
233was started, rounded up to the next full 24-hour period, is
234.Ar n
23524-hour periods.
236.Pp
237If units are specified, this primary evaluates to
238true if the difference between the file last access time and the time
239.Nm
240was started is exactly
241.Ar n
242units.
243Possible time units are as follows:
244.Pp
245.Bl -tag -width indent -compact
246.It Cm s
247second
248.It Cm m
249minute (60 seconds)
250.It Cm h
251hour (60 minutes)
252.It Cm d
253day (24 hours)
254.It Cm w
255week (7 days)
256.El
257.Pp
258Any number of units may be combined in one
259.Ic -atime
260argument, for example,
261.Dq Li "-atime -1h30m" .
262Units are probably only useful when used in conjunction with the
263.Cm +
264or
265.Cm -
266modifier.
267.It Ic -cmin Ar n
268True if the difference between the time of last change of file status
269information and the time
270.Nm
271was started, rounded up to the next full minute, is
272.Ar n
273minutes.
274.It Ic -cnewer Ar file
275Same as
276.Ic -newercm .
277.It Ic -ctime Ar n Ns Op Cm smhdw
278If no units are specified, this primary evaluates to
279true if the difference between the time of last change of file status
280information and the time
281.Nm
282was started, rounded up to the next full 24-hour period, is
283.Ar n
28424-hour periods.
285.Pp
286If units are specified, this primary evaluates to
287true if the difference between the time of last change of file status
288information and the time
289.Nm
290was started is exactly
291.Ar n
292units.
293Please refer to the
294.Ic -atime
295primary description for information on supported time units.
296.It Ic -d
297Same as
298.Ic depth .
299GNU find implements this as a primary in mistaken emulation of
300.Fx
301.Xr find 1 .
302.It Ic -delete
303Delete found files and/or directories.
304Always returns true.
305This executes
306from the current working directory as
307.Nm
308recurses down the tree.
309It will not attempt to delete a filename with a
310.Dq Pa /
311character in its pathname relative to
312.Dq Pa \&.
313for security reasons.
314Depth-first traversal processing is implied by this option.
315.It Ic -depth
316Always true;
317same as the
318.Fl d
319option.
320.It Ic -depth Ar n
321True if the depth of the file relative to the starting point of the traversal
322is
323.Ar n .
324.It Ic -empty
325True if the current file or directory is empty.
326.It Ic -exec Ar utility Oo Ar argument ... Oc Li \&;
327True if the program named
328.Ar utility
329returns a zero value as its exit status.
330Optional
331.Ar arguments
332may be passed to the utility.
333The expression must be terminated by a semicolon
334.Pq Dq Li \&; .
335If you invoke
336.Nm
337from a shell you may need to quote the semicolon if the shell would
338otherwise treat it as a control operator.
339If the string
340.Dq Li {}
341appears anywhere in the utility name or the
342arguments it is replaced by the pathname of the current file.
343.Ar Utility
344will be executed from the directory from which
345.Nm
346was executed.
347.Ar Utility
348and
349.Ar arguments
350are not subject to the further expansion of shell patterns
351and constructs.
352.It Ic -exec Ar utility Oo Ar argument ... Oc Li {} +
353Same as
354.Ic -exec ,
355except that
356.Dq Li {}
357is replaced with as many pathnames as possible for each invocation of
358.Ar utility .
359This behaviour is similar to that of
360.Xr xargs 1 .
361.It Ic -execdir Ar utility Oo Ar argument ... Oc Li \&;
362The
363.Ic -execdir
364primary is identical to the
365.Ic -exec
366primary with the exception that
367.Ar utility
368will be executed from the directory that holds
369the current file.
370The filename substituted for
371the string
372.Dq Li {}
373is not qualified.
374.It Ic -execdir Ar utility Oo Ar argument ... Oc Li {} +
375Same as
376.Ic -execdir ,
377except that
378.Dq Li {}
379is replaced with as many pathnames as possible for each invocation of
380.Ar utility .
381This behaviour is similar to that of
382.Xr xargs 1 .
383.It Ic -flags Oo Cm - Ns | Ns Cm + Oc Ns Ar flags , Ns Ar notflags
384The flags are specified using symbolic names (see
385.Xr chflags 1 ) .
386Those with the
387.Qq Li no
388prefix (except
389.Qq Li nodump )
390are said to be
391.Ar notflags .
392Flags in
393.Ar flags
394are checked to be set, and flags in
395.Ar notflags
396are checked to be not set.
397Note that this is different from
398.Ic -perm ,
399which only allows the user to specify mode bits that are set.
400.Pp
401If flags are preceded by a dash
402.Pq Dq Li - ,
403this primary evaluates to true
404if at least all of the bits in
405.Ar flags
406and none of the bits in
407.Ar notflags
408are set in the file's flags bits.
409If flags are preceded by a plus
410.Pq Dq Li + ,
411this primary evaluates to true
412if any of the bits in
413.Ar flags
414is set in the file's flags bits,
415or any of the bits in
416.Ar notflags
417is not set in the file's flags bits.
418Otherwise,
419this primary evaluates to true
420if the bits in
421.Ar flags
422exactly match the file's flags bits,
423and none of the
424.Ar flags
425bits match those of
426.Ar notflags .
427.It Ic -fstype Ar type
428True if the file is contained in a file system of type
429.Ar type .
430The
431.Xr sysctl 8
432command can be used to find out the types of file systems
433that are available on the system:
434.Pp
435.Dl "sysctl vfs"
436.Pp
437In addition, there are two pseudo-types,
438.Dq Li local
439and
440.Dq Li rdonly .
441The former matches any file system physically mounted on the system where
442the
443.Nm
444is being executed and the latter matches any file system which is
445mounted read-only.
446.It Ic -gid Ar gname
447The same thing as
448.Ar -group Ar gname
449for compatibility with GNU find.
450GNU find imposes a restriction that
451.Ar gname
452is numeric, while
453.Xr find 1
454does not.
455.It Ic -group Ar gname
456True if the file belongs to the group
457.Ar gname .
458If
459.Ar gname
460is numeric and there is no such group name, then
461.Ar gname
462is treated as a group ID.
463.It Ic -ignore_readdir_race
464This option is for GNU find compatibility and is ignored.
465.It Ic -ilname Ar pattern
466Like
467.Ic -lname ,
468but the match is case insensitive.
469This is a GNU find extension.
470.It Ic -iname Ar pattern
471Like
472.Ic -name ,
473but the match is case insensitive.
474.It Ic -inum Ar n
475True if the file has inode number
476.Ar n .
477.It Ic -ipath Ar pattern
478Like
479.Ic -path ,
480but the match is case insensitive.
481.It Ic -iregex Ar pattern
482Like
483.Ic -regex ,
484but the match is case insensitive.
485.It Ic -iwholename Ar pattern
486The same thing as
487.Ic -ipath ,
488for GNU find compatibility.
489.It Ic -links Ar n
490True if the file has
491.Ar n
492links.
493.It Ic -lname Ar pattern
494Like
495.Ic -name ,
496but the contents of the symbolic link are matched instead of the file
497name.
498This is a GNU find extension.
499.It Ic -ls
500This primary always evaluates to true.
501The following information for the current file is written to standard output:
502its inode number, size in 512-byte blocks, file permissions, number of hard
503links, owner, group, size in bytes, last modification time, and pathname.
504If the file is a block or character special file, the major and minor numbers
505will be displayed instead of the size in bytes.
506If the file is a symbolic link, the pathname of the linked-to file will be
507displayed preceded by
508.Dq Li -> .
509The format is identical to that produced by
510.Bk -words
511.Dq Nm ls Fl dgils .
512.Ek
513.It Ic -maxdepth Ar n
514Always true; descend at most
515.Ar n
516directory levels below the command line arguments.
517If any
518.Ic -maxdepth
519primary is specified, it applies to the entire expression even if it would
520not normally be evaluated.
521.Dq Ic -maxdepth Li 0
522limits the whole search to the command line arguments.
523.It Ic -mindepth Ar n
524Always true; do not apply any tests or actions at levels less than
525.Ar n .
526If any
527.Ic -mindepth
528primary is specified, it applies to the entire expression even if it would
529not normally be evaluated.
530.Dq Ic -mindepth Li 1
531processes all but the command line arguments.
532.It Ic -mmin Ar n
533True if the difference between the file last modification time and the time
534.Nm
535was started, rounded up to the next full minute, is
536.Ar n
537minutes.
538.It Ic -mnewer Ar file
539Same as
540.Ic -newer .
541.It Ic -mount
542The same thing as
543.Ic -xdev ,
544for GNU find compatibility.
545.It Ic -mtime Ar n Ns Op Cm smhdw
546If no units are specified, this primary evaluates to
547true if the difference between the file last modification time and the time
548.Nm
549was started, rounded up to the next full 24-hour period, is
550.Ar n
55124-hour periods.
552.Pp
553If units are specified, this primary evaluates to
554true if the difference between the file last modification time and the time
555.Nm
556was started is exactly
557.Ar n
558units.
559Please refer to the
560.Ic -atime
561primary description for information on supported time units.
562.It Ic -name Ar pattern
563True if the last component of the pathname being examined matches
564.Ar pattern .
565Special shell pattern matching characters
566.Dq ( Li \&[ ,
567.Dq Li \&] ,
568.Dq Li * ,
569and
570.Dq Li \&? )
571may be used as part of
572.Ar pattern .
573These characters may be matched explicitly by escaping them with a
574backslash
575.Pq Dq Li \e .
576.It Ic -newer Ar file
577True if the current file has a more recent last modification time than
578.Ar file .
579.It Ic -newer Ns Ar X Ns Ar Y Ar file
580True if the current file has a more recent last access time
581.Pq Ar X Ns = Ns Cm a ,
582inode creation time
583.Pq Ar X Ns = Ns Cm B ,
584change time
585.Pq Ar X Ns = Ns Cm c ,
586or modification time
587.Pq Ar X Ns = Ns Cm m
588than the last access time
589.Pq Ar Y Ns = Ns Cm a ,
590inode creation time
591.Pq Ar Y Ns = Ns Cm B ,
592change time
593.Pq Ar Y Ns = Ns Cm c ,
594or modification time
595.Pq Ar Y Ns = Ns Cm m
596of
597.Ar file .
598In addition, if
599.Ar Y Ns = Ns Cm t ,
600then
601.Ar file
602is instead interpreted as a direct date specification of the form
603understood by
604.Xr cvs 1 .
605Note that
606.Ic -newermm
607is equivalent to
608.Ic -newer .
609.It Ic -nogroup
610True if the file belongs to an unknown group.
611.It Ic -noignore_readdir_race
612This option is for GNU find compatibility and is ignored.
613.It Ic -noleaf
614This option is for GNU find compatibility.
615In GNU find it disables an optimization not relevant to
616.Xr find 1 ,
617so it is ignored.
618.It Ic -nouser
619True if the file belongs to an unknown user.
620.It Ic -ok Ar utility Oo Ar argument ... Oc Li \&;
621The
622.Ic -ok
623primary is identical to the
624.Ic -exec
625primary with the exception that
626.Nm
627requests user affirmation for the execution of the
628.Ar utility
629by printing
630a message to the terminal and reading a response.
631If the response is not affirmative
632.Ql ( y
633in the
634.Dq Li POSIX
635locale),
636the command is not executed and the
637value of the
638.Ic -ok
639expression is false.
640.It Ic -okdir Ar utility Oo Ar argument ... Oc Li \&;
641The
642.Ic -okdir
643primary is identical to the
644.Ic -execdir
645primary with the same exception as described for the
646.Ic -ok
647primary.
648.It Ic -path Ar pattern
649True if the pathname being examined matches
650.Ar pattern .
651Special shell pattern matching characters
652.Dq ( Li \&[ ,
653.Dq Li \&] ,
654.Dq Li * ,
655and
656.Dq Li \&? )
657may be used as part of
658.Ar pattern .
659These characters may be matched explicitly by escaping them with a
660backslash
661.Pq Dq Li \e .
662Slashes
663.Pq Dq Li /
664are treated as normal characters and do not have to be
665matched explicitly.
666.It Ic -perm Oo Cm - Ns | Ns Cm + Oc Ns Ar mode
667The
668.Ar mode
669may be either symbolic (see
670.Xr chmod 1 )
671or an octal number.
672If the
673.Ar mode
674is symbolic, a starting value of zero is assumed and the
675.Ar mode
676sets or clears permissions without regard to the process' file mode
677creation mask.
678If the
679.Ar mode
680is octal, only bits 07777
681.Pq Dv S_ISUID | S_ISGID | S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO
682of the file's mode bits participate
683in the comparison.
684If the
685.Ar mode
686is preceded by a dash
687.Pq Dq Li - ,
688this primary evaluates to true
689if at least all of the bits in the
690.Ar mode
691are set in the file's mode bits.
692If the
693.Ar mode
694is preceded by a plus
695.Pq Dq Li + ,
696this primary evaluates to true
697if any of the bits in the
698.Ar mode
699are set in the file's mode bits.
700Otherwise, this primary evaluates to true if
701the bits in the
702.Ar mode
703exactly match the file's mode bits.
704Note, the first character of a symbolic mode may not be a dash
705.Pq Dq Li - .
706.It Ic -print
707This primary always evaluates to true.
708It prints the pathname of the current file to standard output.
709If none of
710.Ic -exec , -ls , -print0 ,
711or
712.Ic -ok
713is specified, the given expression shall be effectively replaced by
714.Cm \&( Ar "given expression" Cm \&) Ic -print .
715.It Ic -print0
716This primary always evaluates to true.
717It prints the pathname of the current file to standard output, followed by an
718.Tn ASCII
719.Dv NUL
720character (character code 0).
721.It Ic -prune
722This primary always evaluates to true.
723It causes
724.Nm
725to not descend into the current file.
726Note, the
727.Ic -prune
728primary has no effect if the
729.Fl d
730option was specified.
731.It Ic -regex Ar pattern
732True if the whole path of the file matches
733.Ar pattern
734using regular expression.
735To match a file named
736.Dq Pa ./foo/xyzzy ,
737you can use the regular expression
738.Dq Li ".*/[xyz]*"
739or
740.Dq Li ".*/foo/.*" ,
741but not
742.Dq Li xyzzy
743or
744.Dq Li /foo/ .
745.It Ic -samefile Ar name
746True if the file is a hard link to
747.Ar name .
748If the command option
749.Ic -L
750is specified, it is also true if the file is a symbolic link and
751points to
752.Ar name .
753.It Ic -size Ar n Ns Op Cm ckMGTP
754True if the file's size, rounded up, in 512-byte blocks is
755.Ar n .
756If
757.Ar n
758is followed by a
759.Cm c ,
760then the primary is true if the
761file's size is
762.Ar n
763bytes (characters).
764Similarly if
765.Ar n
766is followed by a scale indicator then the file's size is compared to
767.Ar n
768scaled as:
769.Pp
770.Bl -tag -width indent -compact
771.It Cm k
772kilobytes (1024 bytes)
773.It Cm M
774megabytes (1024 kilobytes)
775.It Cm G
776gigabytes (1024 megabytes)
777.It Cm T
778terabytes (1024 gigabytes)
779.It Cm P
780petabytes (1024 terabytes)
781.El
782.It Ic -type Ar t
783True if the file is of the specified type.
784Possible file types are as follows:
785.Pp
786.Bl -tag -width indent -compact
787.It Cm b
788block special
789.It Cm c
790character special
791.It Cm d
792directory
793.It Cm f
794regular file
795.It Cm l
796symbolic link
797.It Cm p
798FIFO
799.It Cm s
800socket
801.El
802.It Ic -uid Ar uname
803The same thing as
804.Ar -user Ar uname
805for compatibility with GNU find.
806GNU find imposes a restriction that
807.Ar uname
808is numeric, while
809.Xr find 1
810does not.
811.It Ic -user Ar uname
812True if the file belongs to the user
813.Ar uname .
814If
815.Ar uname
816is numeric and there is no such user name, then
817.Ar uname
818is treated as a user ID.
819.It Ic -wholename Ar pattern
820The same thing as
821.Ic -path ,
822for GNU find compatibility.
823.El
824.Pp
825All primaries which take a numeric argument allow the number to be
826preceded by a plus sign
827.Pq Dq Li +
828or a minus sign
829.Pq Dq Li - .
830A preceding plus sign means
831.Dq more than n ,
832a preceding minus sign means
833.Dq less than n
834and neither means
835.Dq exactly n .
836.Sh OPERATORS
837The primaries may be combined using the following operators.
838The operators are listed in order of decreasing precedence.
839.Pp
840.Bl -tag -width indent -compact
841.It Cm \&( Ar expression Cm \&)
842This evaluates to true if the parenthesized expression evaluates to
843true.
844.Pp
845.It Cm \&! Ar expression
846.It Cm -not Ar expression
847This is the unary
848.Tn NOT
849operator.
850It evaluates to true if the expression is false.
851.Pp
852.It Cm -false
853Always false.
854.It Cm -true
855Always true.
856.Pp
857.It Ar expression Cm -and Ar expression
858.It Ar expression expression
859The
860.Cm -and
861operator is the logical
862.Tn AND
863operator.
864As it is implied by the juxtaposition of two expressions it does not
865have to be specified.
866The expression evaluates to true if both expressions are true.
867The second expression is not evaluated if the first expression is false.
868.Pp
869.It Ar expression Cm -or Ar expression
870The
871.Cm -or
872operator is the logical
873.Tn OR
874operator.
875The expression evaluates to true if either the first or the second expression
876is true.
877The second expression is not evaluated if the first expression is true.
878.El
879.Pp
880All operands and primaries must be separate arguments to
881.Nm .
882Primaries which themselves take arguments expect each argument
883to be a separate argument to
884.Nm .
885.Sh ENVIRONMENT
886The
887.Ev LANG , LC_ALL , LC_COLLATE , LC_CTYPE , LC_MESSAGES
888and
889.Ev LC_TIME
890environment variables affect the execution of the
891.Nm
892utility as described in
893.Xr environ 7 .
894.Sh EXAMPLES
895The following examples are shown as given to the shell:
896.Bl -tag -width indent
897.It Li "find / \e! -name \*q*.c\*q -print"
898Print out a list of all the files whose names do not end in
899.Pa .c .
900.It Li "find / -newer ttt -user wnj -print"
901Print out a list of all the files owned by user
902.Dq wnj
903that are newer
904than the file
905.Pa ttt .
906.It Li "find / \e! \e( -newer ttt -user wnj \e) -print"
907Print out a list of all the files which are not both newer than
908.Pa ttt
909and owned by
910.Dq wnj .
911.It Li "find / \e( -newer ttt -or -user wnj \e) -print"
912Print out a list of all the files that are either owned by
913.Dq wnj
914or that are newer than
915.Pa ttt .
916.It Li "find / -newerct '1 minute ago' -print"
917Print out a list of all the files whose inode change time is more
918recent than the current time minus one minute.
919.It Li "find / -type f -exec echo {} \e;"
920Use the
921.Xr echo 1
922command to print out a list of all the files.
923.It Li "find -L /usr/ports/packages -type l -delete"
924Delete all broken symbolic links in
925.Pa /usr/ports/packages .
926.It Li "find /usr/src -name CVS -prune -o -depth +6 -print"
927Find files and directories that are at least seven levels deep
928in the working directory
929.Pa /usr/src .
930.It Li "find /usr/src -name CVS -prune -o -mindepth 7 -print"
931Is not equivalent to the previous example, since
932.Ic -prune
933is not evaluated below level seven.
934.El
935.Sh COMPATIBILITY
936The
937.Ic -follow
938primary is deprecated; the
939.Fl L
940option should be used instead.
941See the
942.Sx STANDARDS
943section below for details.
944.Sh SEE ALSO
945.Xr chflags 1 ,
946.Xr chmod 1 ,
947.Xr cvs 1 ,
948.Xr locate 1 ,
949.Xr whereis 1 ,
950.Xr which 1 ,
951.Xr xargs 1 ,
952.Xr stat 2 ,
953.Xr acl 3 ,
954.Xr fts 3 ,
955.Xr getgrent 3 ,
956.Xr getpwent 3 ,
957.Xr strmode 3 ,
958.Xr re_format 7 ,
959.Xr symlink 7
960.Sh STANDARDS
961The
962.Nm
963utility syntax is a superset of the syntax specified by the
964.St -p1003.1-2001
965standard.
966.Pp
967All the single character options except
968.Fl H
969and
970.Fl L
971as well as
972.Ic -amin , -anewer , -cmin , -cnewer , -delete , -empty , -fstype ,
973.Ic -iname , -inum , -iregex , -ls , -maxdepth , -mindepth , -mmin ,
974.Ic -path , -print0 , -regex
975and all of the
976.Ic -B*
977birthtime related primaries are extensions to
978.St -p1003.1-2001 .
979.Pp
980Historically, the
981.Fl d , L
982and
983.Fl x
984options were implemented using the primaries
985.Ic -depth , -follow ,
986and
987.Ic -xdev .
988These primaries always evaluated to true.
989As they were really global variables that took effect before the traversal
990began, some legal expressions could have unexpected results.
991An example is the expression
992.Ic -print Cm -o Ic -depth .
993As
994.Ic -print
995always evaluates to true, the standard order of evaluation
996implies that
997.Ic -depth
998would never be evaluated.
999This is not the case.
1000.Pp
1001The operator
1002.Cm -or
1003was implemented as
1004.Cm -o ,
1005and the operator
1006.Cm -and
1007was implemented as
1008.Cm -a .
1009.Pp
1010Historic implementations of the
1011.Ic -exec
1012and
1013.Ic -ok
1014primaries did not replace the string
1015.Dq Li {}
1016in the utility name or the
1017utility arguments if it had preceding or following non-whitespace characters.
1018This version replaces it no matter where in the utility name or arguments
1019it appears.
1020.Pp
1021The
1022.Fl E
1023option was inspired by the equivalent
1024.Xr grep 1
1025and
1026.Xr sed 1
1027options.
1028.Sh HISTORY
1029A
1030.Nm
1031command appeared in
1032.At v1 .
1033.Sh BUGS
1034The special characters used by
1035.Nm
1036are also special characters to many shell programs.
1037In particular, the characters
1038.Dq Li * ,
1039.Dq Li \&[ ,
1040.Dq Li \&] ,
1041.Dq Li \&? ,
1042.Dq Li \&( ,
1043.Dq Li \&) ,
1044.Dq Li \&! ,
1045.Dq Li \e
1046and
1047.Dq Li \&;
1048may have to be escaped from the shell.
1049.Pp
1050As there is no delimiter separating options and file names or file
1051names and the
1052.Ar expression ,
1053it is difficult to specify files named
1054.Pa -xdev
1055or
1056.Pa \&! .
1057These problems are handled by the
1058.Fl f
1059option and the
1060.Xr getopt 3
1061.Dq Fl Fl
1062construct.
1063.Pp
1064The
1065.Ic -delete
1066primary does not interact well with other options that cause the file system
1067tree traversal options to be changed.
1068.Pp
1069The
1070.Ic -mindepth
1071and
1072.Ic -maxdepth
1073primaries are actually global options (as documented above).
1074They should
1075probably be replaced by options which look like options.
1076