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