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