etc/protocols - sync with NetBSD-8
[minix.git] / usr.bin / find / find.1
bloba02abdabcc9d6758bbb65db8b10fb47376855a15
1 .\"     $NetBSD: find.1,v 1.81 2014/05/17 11:31:40 apb Exp $
2 .\"
3 .\" Copyright (c) 1990, 1993
4 .\"     The Regents of the University of California.  All rights reserved.
5 .\"
6 .\" This code is derived from software contributed to Berkeley by
7 .\" the Institute of Electrical and Electronics Engineers, Inc.
8 .\"
9 .\" Redistribution and use in source and binary forms, with or without
10 .\" modification, are permitted provided that the following conditions
11 .\" are met:
12 .\" 1. Redistributions of source code must retain the above copyright
13 .\"    notice, this list of conditions and the following disclaimer.
14 .\" 2. Redistributions in binary form must reproduce the above copyright
15 .\"    notice, this list of conditions and the following disclaimer in the
16 .\"    documentation and/or other materials provided with the distribution.
17 .\" 3. Neither the name of the University nor the names of its contributors
18 .\"    may be used to endorse or promote products derived from this software
19 .\"    without specific prior written permission.
20 .\"
21 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 .\" SUCH DAMAGE.
32 .\"
33 .\"     from: @(#)find.1        8.7 (Berkeley) 5/9/95
34 .\"
35 .Dd May 17, 2014
36 .Dt FIND 1
37 .Os
38 .Sh NAME
39 .Nm find
40 .Nd walk a file hierarchy
41 .Sh SYNOPSIS
42 .Nm
43 .Op Fl H | Fl L | Fl P
44 .Op Fl dEhsXx
45 .Ar file
46 .Op Ar file ...
47 .Op Ar expression
48 .Nm
49 .Op Fl H | Fl L | Fl P
50 .Op Fl dEhsXx
51 .Fl f Ar file
52 .Op Ar file ...
53 .Op Ar expression
54 .Sh DESCRIPTION
55 .Nm
56 recursively descends the directory tree for each
57 .Ar file
58 listed, evaluating an
59 .Ar expression
60 (composed of the
61 .Dq primaries
62 and
63 .Dq operands
64 listed below) in terms
65 of each file in the tree.
66 .Pp
67 The options are as follows:
68 .Bl -tag -width Ds
69 .It Fl H
70 Causes the file information and file type (see
71 .Xr stat 2 )
72 returned for each symbolic link encountered on the command line to be
73 those of the file referenced by the link, not the link itself.
74 If the referenced file does not exist, the file information and type will
75 be for the link itself.
76 File information of all symbolic links not on the command line is that
77 of the link itself.
78 .It Fl L
79 Causes the file information and file type (see
80 .Xr stat 2 )
81 returned for each symbolic link to be those of the file referenced by the
82 link, not the link itself.
83 If the referenced file does not exist, the file information and type will
84 be for the link itself.
85 .It Fl P
86 Causes the file information and file type (see
87 .Xr stat 2 )
88 returned for each symbolic link to be those of the link itself.
89 .It Fl d
90 Causes
91 .Nm
92 to perform a depth-first traversal, i.e., directories
93 are visited in post-order, and all entries in a directory will be acted
94 on before the directory itself.
95 By default,
96 .Nm
97 visits directories in pre-order, i.e., before their contents.
98 Note, the default is
99 .Ar not
100 a breadth-first traversal.
101 .It Fl E
102 Causes
103 .Ar regexp
104 arguments to primaries to be interpreted as extended regular
105 expressions (see
106 .Xr re_format 7 ) .
107 .It Fl f
108 Specifies a file hierarchy for
110 to traverse.
111 File hierarchies may also be specified as the operands immediately
112 following the options.
113 .It Fl h
114 Causes the file information and file type (see
115 .Xr stat 2 )
116 returned for each symbolic link to be those of the file referenced by the
117 link, not the link itself.
118 If the referenced file does not exist, the file information and type will
119 be for the link itself.
120 .It Fl s
121 Causes the entries of each directory to be sorted in
122 lexicographical order.
123 Note that the sorting is done only inside of each directory;
124 files in different directories are not sorted.
125 Therefore,
126 .Sq Li a/b
127 appears before
128 .Sq Li a.b ,
129 which is different from
130 .Dq Li "find ... \&| sort"
131 order.
132 .It Fl X
133 Modifies the output to permit
135 to be safely used in conjunction with
136 .Xr xargs 1 .
137 If a file name contains any of the delimiting characters used by
138 .Xr xargs 1 ,
139 a diagnostic message is displayed on standard error, and the file
140 is skipped.
141 The delimiting characters include single
142 .Pq Dq \&'
143 and double
144 .Pq Dq \&"
145 quotes, backslash
146 .Pq Dq \e ,
147 space, tab, and newline characters.
148 Alternatively, the
149 .Ic -print0
151 .Ic -printx
152 primaries can be used to format the output in a way that
153 .Xr xargs 1
154 can accept.
155 .It Fl x
156 Restricts the search to the file system containing the
157 directory specified.
158 Does not list mount points to other file systems.
160 .Sh PRIMARIES
161 All primaries which take a numeric argument of
162 .Ar n
163 allow the number to be preceded by a plus sign
164 .Pq Dq \&+
165 or a minus sign
166 .Pq Dq \- .
167 A preceding plus sign means
168 .Dq more than Ar n ,
169 a preceding minus sign means
170 .Dq less than Ar n ,
171 and neither means
172 .Dq exactly Ar n .
174 .Bl -tag -width Ds -compact
175 .It Ic -amin Ar n
176 True if the difference between the file last access time and the time
178 was started, rounded up to the next full minute, is
179 .Ar n
180 minutes.
182 .It Ic -anewer Ar file
183 True if the current file has a more recent last access time than
184 .Ar file .
186 .It Ic -atime Ar n
187 True if the difference between the file last access time and the time
189 was started, rounded up to the next full 24-hour period, is
190 .Ar n
191 24-hour periods.
193 .It Ic -cmin Ar n
194 True if the difference between the time of last change of file status
195 information and the time
197 was started, rounded up to the next full minute, is
198 .Ar n
199 minutes.
201 .It Ic -cnewer Ar file
202 True if the current file has a more recent last change time than
203 .Ar file .
205 .It Ic -ctime Ar n
206 True if the difference between the time of last change of file status
207 information and the time
209 was started, rounded up to the next full 24-hour period, is
210 .Ar n
211 24-hour periods.
213 .It Ic -delete
214 Delete found files, symbolic links, and directories.
215 Always returns true.
216 This executes from the current working directory as
218 recurses down the tree.
219 To avoid deleting unexpected files, it will ignore any filenames that
220 .Xr fts 3
221 returns that contain a
222 .Dq /
223 .Xr ( fts 3
224 should not return such pathnames).
225 Depth-first traversal processing is implied by this option.
226 This primary can also be invoked as
227 .Ic -rm .
229 .It Ic -empty
230 True if the current file or directory is empty.
232 .It Ic -exec Ar utility Oo argument ... Oc Ic \&;
233 .It Ic -exec Ar utility Oo argument ... Oc Ic {} Ic \&+
234 Execute the specified
235 .Ar utility
236 with the specified arguments.
238 The list of arguments for
239 .Ar utility
240 is terminated by a lone semicolon
241 .Dq Ic \&;
242 or plus
243 .Dq Ic \&+
244 character as a separate parameter.
245 The command specified by
246 .Ar utility
247 will be executed with its current working directory being the directory
248 from which
250 was executed.
252 If the list of arguments is terminated by a semicolon
253 .Pq Dq Ic \&; ,
254 then
255 .Ar utility
256 is invoked once per pathname.
258 the string
259 .Dq Ic {}
260 appears one or more times in the utility name or arguments,
261 then it is replaced by the pathname of the current file
262 (but it need not appear, in which case the pathname
263 will not be passed to
264 .Ar utility ) .
265 The semicolon-terminated form of the
266 .Ic -exec
267 primary returns true if and only if
268 .Ar utility
269 exits with a zero exit status.
270 Note that the semicolon will have to be escaped on the shell command line
271 in order to be passed as a parameter.
273 If the list of arguments is terminated by a plus sign
274 .Pq Dq Ic \&+ ,
275 then the pathnames for which the primary is evaluated are aggregated
276 into sets, and
277 .Ar utility
278 will be invoked once per set, similar to
279 .Xr xargs 1 .
280 In this case the string
281 .Dq Ic {}
282 must appear, and must appear as the last item in the argument list,
283 just before the
284 .Dq Ic \&+
285 parameter, and is replaced by the pathnames of the current set of files.
286 Each set is limited to no more than 5,000 pathnames,
287 and is also limited such that the total number of bytes in the argument
288 list does not exceed
289 .Dv ARG_MAX .
290 The plus-terminated form of the
291 .Ic -exec
292 primary always returns true.
293 If the plus-terminated form of the
294 .Ic -exec
295 primary results in any invocation of
296 .Ar utility
297 exiting with non-zero exit status, then
299 will eventually exit with non-zero status as well,
300 but this does not cause
302 to exit early.
304 .It Ic -execdir Ar utility Oo argument ... Oc Ic \&;
306 .Ic -execdir
307 primary is similar to the semicolon-terminated
308 .Pq Dq Ic \&;
309 variant of the
310 .Ic -exec
311 primary, with the exception that
312 .Ar utility
313 will be executed from the directory that holds
314 the current file.
315 Only the base filename is substituted for the string
316 .Dq Ic {} .
317 Set aggregation
318 .Pq Do Ic \&+ Dc termination
319 is not supported.
321 .It Ic -exit Op Ar status
322 This primary causes
324 to stop traversing the file system and exit immediately,
325 with the specified numeric exit status.
326 If the
327 .Ar status
328 value is not specified, then
330 will exit with status zero.
331 Note that any preceding primaries will be evaluated and acted upon
332 before exiting.
334 .It Ic -false
335 This primary always evaluates to false.
336 This can be used following a primary that caused the
337 expression to be true to make the expression to be false.
338 This can be useful after using a
339 .Ic -fprint
340 primary so it can continue to the next expression (using an
341 .Cm -or
342 operator, for example).
344 .It Ic -flags Oo Fl Oc Ns Ar flags
346 .Ar flags
347 are preceded by a dash
348 .Pq Dq Ic \- ,
349 this primary evaluates to true
350 if at least all of the bits in
351 .Ar flags
352 are set in the file's flags bits.
354 .Ar flags
355 are not preceded by a dash, this primary evaluates to true if
356 the bits in
357 .Ar flags
358 exactly match the file's flags bits.
360 .Ar flags
362 .Dq none ,
363 files with no flags bits set are matched.
364 (See
365 .Xr chflags 1
366 for more information about file flags.)
368 .It Ic -follow
369 Follow symbolic links.
371 .It Ic -fprint Ar filename
372 This primary always evaluates to true.
373 This creates
374 .Ar filename
375 or overwrites the file if it already exists.
376 The file is created at startup.
377 It writes the pathname of the current file to this file, followed
378 by a newline character.
379 The file will be empty if no files are matched.
381 .It Ic -fstype Ar type
382 True if the file is contained in a file system of type
383 .Ar type .
385 .Xr sysctl 8
386 command can be used to find out the types of file systems
387 that are available on the system:
388 .Bd -literal -offset indent
389 sysctl vfs.generic.fstypes
392 In addition, there are two pseudo-types,
393 .Dq local
395 .Dq rdonly .
396 The former matches any file system physically mounted on the system where
399 is being executed, and the latter matches any file system which is
400 mounted read-only.
402 .It Ic -group Ar gname
403 True if the file belongs to the group
404 .Ar gname .
406 .Ar gname
407 is numeric and there is no such group name, then
408 .Ar gname
409 is treated as a group id.
411 .It Ic -iname Ar pattern
412 True if the last component of the pathname being examined matches
413 .Ar pattern
414 in a case-insensitive manner.
415 Special shell pattern matching characters
417 .Dq \&[ ,
418 .Dq \&] ,
419 .Dq \&* ,
421 .Dq \&?
423 may be used as part of
424 .Ar pattern .
425 These characters may be matched explicitly by escaping them with a
426 backslash
427 .Pq Dq \e .
429 .It Ic -inum Ar n
430 True if the file has inode number
431 .Ar n .
433 .It Ic -iregex Ar regexp
434 True if the path name of the current file matches the case-insensitive
435 basic regular expression
436 .Pq see Xr re_format 7
437 .Ar regexp .
438 This is a match on the whole path, not a search for the regular expression
439 within the path.
441 .It Ic -links Ar n
442 True if the file has
443 .Ar n
444 links.
446 .It Ic -rm
447 This primary is an alias for
448 .Ic -delete .
450 .It Ic -ls
451 This primary always evaluates to true.
452 The following information for the current file is written to standard output:
453 its inode number, size in 512-byte blocks, file permissions, number of hard
454 links, owner, group, size in bytes, last modification time, and pathname.
455 If the file is a block or character special file, the major and minor numbers
456 will be displayed instead of the size in bytes.
457 If the file is a symbolic link, the pathname of the linked-to file will be
458 displayed preceded by
459 .Dq -\*[Gt] .
460 The format is identical to that produced by
461 .Dq ls -dgils .
463 .It Ic -maxdepth Ar n
464 True if the current search depth is less than or equal to what is specified in
465 .Ar n .
467 .It Ic -mindepth Ar n
468 True if the current search depth is at least what is specified in
469 .Ar n .
471 .It Ic -mmin Ar n
472 True if the difference between the file last modification time and the time
474 was started, rounded up to the next full minute, is
475 .Ar n
476 minutes.
478 .It Ic -mtime Ar n
479 True if the difference between the file last modification time and the time
481 was started, rounded up to the next full 24-hour period, is
482 .Ar n
483 24-hour periods.
485 .It Ic -ok Ar utility Oo argument ... Oc Ic \&;
487 .Ic -ok
488 primary is similar to the semicolon-terminated
489 .Pq Dq \&;
490 variant of the
491 .Ic -exec
492 primary, with the exception that
494 requests user affirmation for the execution of
495 .Ar utility
496 by printing
497 a message to the terminal and reading a response.
498 If the response is other than
499 .Dq y ,
500 the command is not executed and the
501 .Ic -ok
502 primary evaluates to false.
503 Set aggregation
504 .Pq Do \&+ Dc termination
505 is not supported.
507 .It Ic -name Ar pattern
508 True if the last component of the pathname being examined matches
509 .Ar pattern .
510 Special shell pattern matching characters
512 .Dq \&[ ,
513 .Dq \&] ,
514 .Dq \&* ,
516 .Dq \&?
518 may be used as part of
519 .Ar pattern .
520 These characters may be matched explicitly by escaping them with a
521 backslash
522 .Pq Dq \e .
524 .It Ic -newer Ar file
525 True if the current file has a more recent last modification time than
526 .Ar file .
528 .It Ic -nouser
529 True if the file belongs to an unknown user.
531 .It Ic -nogroup
532 True if the file belongs to an unknown group.
534 .It Ic -path Ar pattern
535 True if the pathname being examined matches
536 .Ar pattern .
537 Special shell pattern matching characters
539 .Dq \&[ ,
540 .Dq \&] ,
541 .Dq \&* ,
543 .Dq \&?
545 may be used as part of
546 .Ar pattern .
547 These characters may be matched explicitly by escaping them with a
548 backslash
549 .Pq Dq \e .
550 Slashes
551 .Pq Dq /
552 are treated as normal characters and do not have to be
553 matched explicitly.
555 .It Ic -perm Oo Fl Oc Ns Ar mode
557 .Ar mode
558 may be either symbolic (see
559 .Xr chmod 1 )
560 or an octal number.
561 If the mode is symbolic, a starting value of zero is assumed and the
562 mode sets or clears permissions without regard to the process' file mode
563 creation mask.
564 If the mode is octal, only bits 07777
565 .Pf ( Dv S_ISUID
567 .Dv S_ISGID
569 .Dv S_ISTXT
571 .Dv S_IRWXU
573 .Dv S_IRWXG
575 .Dv S_IRWXO )
576 of the file's mode bits participate
577 in the comparison.
578 If the mode is preceded by a dash
579 .Pq Dq Ic \- ,
580 this primary evaluates to true
581 if at least all of the bits in the mode are set in the file's mode bits.
582 If the mode is not preceded by a dash, this primary evaluates to true if
583 the bits in the mode exactly match the file's mode bits.
584 Note, the first character of a symbolic mode may not be a dash
585 .Pq Dq Ic \- .
587 .It Ic -print
588 This primary always evaluates to true.
589 It prints the pathname of the current file to standard output, followed
590 by a newline character.
591 If none of
592 .Ic -delete ,
593 .Ic -exec ,
594 .Ic -execdir ,
595 .Ic -exit ,
596 .Ic -fprint ,
597 .Ic -ls ,
598 .Ic -ok ,
599 .Ic -print0 ,
600 .Ic -printx ,
602 .Ic -rm
603 is specified, the given expression shall be effectively replaced by
604 .Cm \&( Ns Ar given\& expression Ns Cm \&)
605 .Ic -print .
607 .It Ic -print0
608 This primary always evaluates to true.
609 It prints the pathname of the current file to standard output, followed
610 by a NUL character.
612 .It Ic -printx
613 This primary always evaluates to true.
614 It prints the pathname of the current file to standard output,
615 with each space, tab, newline, backslash, dollar sign, and single,
616 double, or back quotation mark prefixed by a backslash, so the output of
618 can safely be used as input to
619 .Xr xargs 1 .
621 .It Ic -prune
622 This primary always evaluates to true.
623 It causes
625 to not descend into the current file.
626 Note, the
627 .Ic -prune
628 primary has no effect if the
629 .Fl d
630 option was specified.
632 .It Ic -regex Ar regexp
633 True if the path name of the current file matches the case-sensitive
634 basic regular expression
635 .Pq see Xr re_format 7
636 .Ar regexp .
637 This is a match on the whole path, not a search for the regular expression
638 within the path.
640 .It Ic -size Ar n Ns Op Cm c
641 True if the file's size, rounded up, in 512-byte blocks is
642 .Ar n .
644 .Ar n
645 is followed by a
646 .Dq Ic c ,
647 then the primary is true if the file's size is
648 .Ar n
649 bytes.
651 .It Ic -type Ar t
652 True if the file is of the specified type.
653 Possible file types are as follows:
655 .Bl -tag -width flag -offset indent -compact
656 .It Cm b
657 block special
658 .It Cm c
659 character special
660 .It Cm d
661 directory
662 .It Cm f
663 regular file
664 .It Cm l
665 symbolic link
666 .It Cm p
667 FIFO
668 .It Cm s
669 socket
670 .It Cm W
671 whiteout
672 .It Cm w
673 whiteout
676 .It Ic -user Ar uname
677 True if the file belongs to the user
678 .Ar uname .
680 .Ar uname
681 is numeric and there is no such user name, then
682 .Ar uname
683 is treated as a user id (and considered a numeric argument).
685 .It Ic -xdev
686 This primary always evaluates to true.
687 It causes find not to descend past directories that have a different
688 device ID
689 .Va ( st_dev ,
691 .Xr stat 2
692 S5.6.2 [POSIX.1]).
694 .Sh OPERATORS
695 The primaries may be combined using the following operators.
696 The operators are listed in order of decreasing precedence.
697 .Bl -tag -width (expression)
698 .It Cm \&( Ar expression Cm \&)
699 This evaluates to true if the parenthesized expression evaluates to
700 true.
701 .It Cm \&! Ar expression
702 This is the unary
703 .Tn NOT
704 operator.
705 It evaluates to true if the expression is false.
706 .It Ar expression Cm -and Ar expression
707 .It Ar expression expression
709 .Cm -and
710 operator is the logical
711 .Tn AND
712 operator.
713 As it is implied by the juxtaposition of two expressions it does not
714 have to be specified.
715 The expression evaluates to true if both expressions are true.
716 The second expression is not evaluated if the first expression is false.
717 .It Ar expression Cm -or Ar expression
719 .Cm -or
720 operator is the logical
721 .Tn OR
722 operator.
723 The expression evaluates to true if either the first or the second expression
724 is true.
725 The second expression is not evaluated if the first expression is true.
728 All operands and primaries must be separate arguments to
729 .Nm .
730 Primaries which themselves take arguments expect each argument
731 to be a separate argument to
732 .Nm .
733 .Sh EXIT STATUS
736 utility normally exits 0 on success, and exits with 1 under certain
737 internal error conditions.
738 If any invocations of
739 .Dq Ic -exec Ar ... Ic \&+
740 primaries return non-zero exit-status, then
742 will do so as well.
743 .Sh EXAMPLES
744 The following examples are shown as given to the shell:
745 .Bl -tag -width findx
746 .It Li "find / \e! -name \*q*.c\*q \-print"
747 Print out a list of all the files whose names do not end in
748 .Dq \&.c .
749 .It Li "find / \-newer ttt \-user wnj \-print"
750 Print out a list of all the files owned by user
751 .Dq wnj
752 that are newer than the file
753 .Dq ttt .
754 .It Li "find . \-type f \-mmin \-30 \-print \-or \-mindepth 1 \-prune"
755 Print out a list of all the files in the current directory that are
756 newer than 30 minutes.
757 .It Li "find . \-type f \-atime +10 \-mindepth 2 \-print"
758 Print out a list of all the files in any sub-directories that have not
759 been accessed in the past ten days.
760 .It Li "find . \-mtime +90 \-exec rm \-i {} + \-or \-mindepth 1 \-prune"
761 Interactively remove all of the files in the current directory that have
762 not been modified in 90 days.
763 .It Li "find . \-type f \-mtime +90 \-ok mv {} {}.old \e;"
764 Interactively rename all of the files in the current directory and all
765 sub-directories that have not been modified in 90 days.
766 .It Li "find / \e! \e( \-newer ttt \-user wnj \e) \-print"
767 Print out a list of all the files which are not both newer than
768 .Dq ttt
769 and owned by
770 .Dq wnj .
771 .It Li "find / \e( \-newer ttt \-or \-user wnj \e) \-print"
772 Print out a list of all the files that are either owned by
773 .Dq wnj
774 or that are newer than
775 .Dq ttt .
776 .It Li "find / \e( \-newer ttt \-or \-user wnj \e) \-exit 1"
777 Return immediately with a value of 1 if any files are found that are either
778 owned by
779 .Dq wnj
780 or that are newer than
781 .Dq ttt ,
782 but do not print them.
783 .It Li "find / \e( \-newer ttt \-or \-user wnj \e) \-ls \-exit 1"
784 Same as above, but list the first file matching the criteria before exiting
785 with a value of 1.
786 .It Li "find . \-type f \-exec sh \-c 'file=\*[q]$1\*[q]; ...;' - {} \;"
787 Perform an arbitrarily complex shell command for every file.
789 .Sh SEE ALSO
790 .Xr chflags 1 ,
791 .Xr chmod 1 ,
792 .Xr locate 1 ,
793 .Xr xargs 1 ,
794 .Xr stat 2 ,
795 .Xr fts 3 ,
796 .Xr getgrent 3 ,
797 .Xr getpwent 3 ,
798 .Xr strmode 3 ,
799 .Xr re_format 7 ,
800 .Xr symlink 7 ,
801 .Xr sysctl 8
802 .Sh STANDARDS
805 utility syntax is a superset of the syntax specified by the
806 .St -p1003.2
807 standard.
809 The options and the
810 .Ic -amin ,
811 .Ic -anewer ,
812 .Ic -cmin ,
813 .Ic -cnewer ,
814 .Ic -delete ,
815 .Ic -empty ,
816 .Ic -execdir ,
817 .Ic -follow ,
818 .Ic -fstype ,
819 .Ic -iname ,
820 .Ic -inum ,
821 .Ic -iregex ,
822 .Ic -links ,
823 .Ic -ls ,
824 .Ic -maxdepth ,
825 .Ic -mindepth ,
826 .Ic -mmin ,
827 .Ic -path ,
828 .Ic -print0 ,
829 .Ic -printx ,
830 .Ic -regex ,
832 .Ic -rm
833 primaries are extensions to
834 .St -p1003.2 .
836 Historically, the
837 .Fl d ,
838 .Fl h ,
840 .Fl x
841 options were implemented using the primaries
842 .Dq Ic -depth ,
843 .Dq Ic -follow ,
845 .Dq Ic -xdev .
846 These primaries always evaluated to true, and always
847 took effect when the
848 .Ar expression
849 was parsed, before the file system traversal began.
850 As a result, some legal expressions could be confusing.
851 For example, in the expression
852 .Dq Ic -print Ic -or Ic -depth ,
853 .Ic -print
854 always evaluates to true, so the standard meaning of
855 .Ic -or
856 implies that
857 .Ic -depth
858 would never be evaluated, but that is not what happens;
859 in fact,
860 .Ic -depth
861 takes effect immediately, without testing whether
862 .Ic -print
863 returns true or false.
865 Historically, the operator
866 .Dq Ic -or
867 was implemented as
868 .Dq Ic -o ,
869 and the operator
870 .Dq Ic -and
871 was implemented as
872 .Dq Ic -a .
874 Historic implementations of the
875 .Dq Ic -exec
877 .Dq Ic -ok
878 primaries did not replace the string
879 .Dq Ic {}
880 in the utility name or the
881 utility arguments if it did not appear as a separate argument.
882 This version replaces it no matter where in the utility name or arguments
883 it appears.
885 Support for
886 .Dq Ic -exec Ar ... Ic \&+
887 is consistent with
888 .Em IEEE PASC Interpretation 1003.2 #210 ,
889 though the feature originated in
890 .Tn SVR4 .
893 .Ic -delete
894 primary does not interact well with other options that cause the file system
895 tree traversal options to be changed.
896 .Sh HISTORY
897 A much simpler
899 command appeared in First Edition AT\*[Am]T Unix.
900 The syntax had become similar to the present version by
901 the time of the Fifth Edition.
902 .Sh BUGS
903 The special characters used by
905 are also special characters to many shell programs.
906 In particular, the characters
907 .Dq \&* ,
908 .Dq \&[ ,
909 .Dq \&] ,
910 .Dq \&? ,
911 .Dq \&( ,
912 .Dq \&) ,
913 .Dq \&! ,
914 .Dq \e ,
916 .Dq \&;
917 may have to be escaped from the shell.
919 As there is no delimiter separating options and file names or file
920 names and the
921 .Ar expression ,
922 it is difficult to specify files named
923 .Dq -xdev
925 .Dq \&! .
926 These problems are handled by the
927 .Fl f
928 option and the
929 .Xr getopt 3
930 .Dq --
931 construct.