Annotation of src/usr.bin/find/find.1, Revision 1.35
1.35 ! millert 1: .\" $OpenBSD: find.1,v 1.34 2001/08/22 23:43:13 deraadt Exp $
1.1 deraadt 2: .\" Copyright (c) 1990, 1993
3: .\" The Regents of the University of California. All rights reserved.
4: .\"
5: .\" This code is derived from software contributed to Berkeley by
6: .\" the Institute of Electrical and Electronics Engineers, Inc.
7: .\"
8: .\" Redistribution and use in source and binary forms, with or without
9: .\" modification, are permitted provided that the following conditions
10: .\" are met:
11: .\" 1. Redistributions of source code must retain the above copyright
12: .\" notice, this list of conditions and the following disclaimer.
13: .\" 2. Redistributions in binary form must reproduce the above copyright
14: .\" notice, this list of conditions and the following disclaimer in the
15: .\" documentation and/or other materials provided with the distribution.
16: .\" 3. All advertising materials mentioning features or use of this software
17: .\" must display the following acknowledgement:
18: .\" This product includes software developed by the University of
19: .\" California, Berkeley and its contributors.
20: .\" 4. Neither the name of the University nor the names of its contributors
21: .\" may be used to endorse or promote products derived from this software
22: .\" without specific prior written permission.
23: .\"
24: .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25: .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26: .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27: .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28: .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29: .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30: .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31: .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32: .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33: .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34: .\" SUCH DAMAGE.
35: .\"
36: .\" from: @(#)find.1 8.1 (Berkeley) 6/6/93
37: .\"
1.24 millert 38: .Dd December 4, 1999
1.1 deraadt 39: .Dt FIND 1
40: .Os
41: .Sh NAME
42: .Nm find
43: .Nd walk a file hierarchy
44: .Sh SYNOPSIS
45: .Nm find
1.35 ! millert 46: .Op Fl dHhLXxW
1.1 deraadt 47: .Op Fl f Ar file
1.32 heko 48: .Ar file Op Ar ...
1.34 deraadt 49: .Op Ar expression
1.1 deraadt 50: .Sh DESCRIPTION
1.22 aaron 51: .Nm
1.1 deraadt 52: recursively descends the directory tree for each
53: .Ar file
54: listed, evaluating an
55: .Ar expression
1.22 aaron 56: (composed of the
57: .Dq primaries
58: and
1.33 hugh 59: .Dq operands
1.22 aaron 60: listed below) in terms
1.12 millert 61: of each file in the tree.
1.34 deraadt 62: In the absence of an expression,
63: .Ic -print
64: is assumed.
1.1 deraadt 65: .Pp
66: The options are as follows:
67: .Bl -tag -width Ds
68: .It Fl d
1.16 aaron 69: Causes
1.22 aaron 70: .Nm
71: to perform a depth-first traversal, i.e., directories
72: are visited in post-order and all entries in a directory will be acted
1.1 deraadt 73: on before the directory itself.
74: By default,
1.22 aaron 75: .Nm
76: visits directories in pre-order, i.e., before their contents.
1.1 deraadt 77: Note, the default is
1.22 aaron 78: .Em not
79: a breadth-first traversal.
1.16 aaron 80: .It Fl f Ar file
81: Specifies a file hierarchy for
1.22 aaron 82: .Nm
1.1 deraadt 83: to traverse.
84: File hierarchies may also be specified as the operands immediately
85: following the options.
1.35 ! millert 86: .It Fl H
! 87: Causes the file information and file type (see
! 88: .Xr stat 2 )
! 89: returned for each symbolic link encountered on the command line to be
! 90: those of the file referenced by the link, not the link itself.
! 91: If the referenced file does not exist, the file information and type will
! 92: be for the link itself.
! 93: File information of all symbolic links not on
! 94: the command line is that of the link itself.
1.1 deraadt 95: .It Fl h
1.35 ! millert 96: An alias for the
! 97: .Fl L
! 98: option.
! 99: This option exists for backwards compatability.
! 100: .It Fl L
1.16 aaron 101: Causes the file information and file type (see
1.22 aaron 102: .Xr stat 2 )
1.1 deraadt 103: returned for each symbolic link to be those of the file referenced by the
104: link, not the link itself.
105: If the referenced file does not exist, the file information and type will
106: be for the link itself.
107: .It Fl X
1.16 aaron 108: Permit
1.1 deraadt 109: .Nm
110: to be safely used in conjunction with
111: .Xr xargs 1 .
112: If a file name contains any of the delimiting characters used by
113: .Xr xargs ,
114: a diagnostic message is displayed on standard error, and the file
115: is skipped.
1.22 aaron 116: The delimiting characters include single
117: .Pq Ql '
118: and double
119: .Pq Ql \&"
120: quotes, backslash
121: .Pq Ql \e ,
122: space, tab, and newline
123: .Pq Sq \en
124: characters.
1.4 deraadt 125: As an alternative, the
126: .Fl print0
127: function may be used safely in conjunction with the
128: .Fl 0
129: argument to
1.16 aaron 130: .Xr xargs 1 .
1.1 deraadt 131: .It Fl x
1.16 aaron 132: Prevents
1.22 aaron 133: .Nm
1.1 deraadt 134: from descending into directories that have a device number different
135: than that of the file from which the descent began.
1.19 espie 136: .It Fl W
137: Let
138: .Nm
139: take whiteouts into account when scanning directories.
1.1 deraadt 140: .El
141: .Sh PRIMARIES
142: .Bl -tag -width Ds
1.22 aaron 143: .It Ic -amin Ar n
1.15 deraadt 144: True if the difference between the file last access time and the time
1.22 aaron 145: .Nm
1.20 aaron 146: was started, rounded up to the next full minute, is
1.15 deraadt 147: .Ar n
1.20 aaron 148: minutes.
1.24 millert 149: .It Ic -anewer Ar file
150: True if the current file has a more recent last access time than
1.25 aaron 151: .Ar file .
1.22 aaron 152: .It Ic -atime Ar n
1.1 deraadt 153: True if the difference between the file last access time and the time
1.22 aaron 154: .Nm
155: was started, rounded up to the next full 24-hour period, is
1.1 deraadt 156: .Ar n
1.22 aaron 157: 24-hour periods.
158: .It Ic -cmin Ar n
1.15 deraadt 159: True if the difference between the time of last change of file status
160: information and the time
1.22 aaron 161: .Nm
1.20 aaron 162: was started, rounded up to the next full minute, is
1.15 deraadt 163: .Ar n
1.20 aaron 164: minutes.
1.24 millert 165: .It Ic -cnewer Ar file
166: True if the current file has a more recent last change time than
1.25 aaron 167: .Ar file .
1.22 aaron 168: .It Ic -ctime Ar n
1.1 deraadt 169: True if the difference between the time of last change of file status
170: information and the time
1.22 aaron 171: .Nm
172: was started, rounded up to the next full 24-hour period, is
1.1 deraadt 173: .Ar n
1.22 aaron 174: 24-hour periods.
1.8 tholo 175: .It Ic -empty
176: True if the current file or directory is empty.
1.22 aaron 177: .It Ic -exec Ar utility Op argument ... ;
1.1 deraadt 178: True if the program named
179: .Ar utility
180: returns a zero value as its exit status.
181: Optional arguments may be passed to the utility.
1.22 aaron 182: The expression must be terminated by a semicolon
183: .Pq Ql \&; .
184: If the string
185: .Qq {}
186: appears anywhere in the utility name or the
1.1 deraadt 187: arguments it is replaced by the pathname of the current file.
1.16 aaron 188: .Ar utility
1.1 deraadt 189: will be executed from the directory from which
1.22 aaron 190: .Nm
1.1 deraadt 191: was executed.
1.22 aaron 192: .It Ic -execdir Ar utility Op argument ... ;
193: Identical to the
1.10 millert 194: .Ic -exec
195: primary with the exception that
1.16 aaron 196: .Ar utility
1.10 millert 197: will be executed from the directory that holds
1.25 aaron 198: the current file.
199: The filename substituted for the string
1.22 aaron 200: .Qq {}
201: is not qualified.
1.28 millert 202: .It Xo
203: .Ic -flags
204: .Op Fl
205: .Ar flags
206: .Xc
207: The
208: .Ar flags
209: are comma-separated symbolic file flags (see
210: .Xr chflags 1
211: for a list of valid flag names).
212: If the flags are preceded by a dash
213: .Pq Sq \- ,
214: this primary evaluates to true if the file in question has at least
215: one of the file flags specified by
216: .Ar flags .
217: If the flags are not preceded by a dash, this primary evaluates to true if the
218: flags specified exactly match those of the file.
1.2 deraadt 219: .It Ic -follow
220: Follow symbolic links.
1.22 aaron 221: .It Ic -fstype Ar type
1.1 deraadt 222: True if the file is contained in a file system of type
223: .Ar type .
1.22 aaron 224: Two special file system types are recognized:
225: .Dq local
226: and
227: .Dq rdonly .
1.1 deraadt 228: These do not describe actual file system types;
229: the former matches any file system physically mounted on the system where
1.22 aaron 230: .Nm
231: is being executed whereas the latter matches any file system which is
1.1 deraadt 232: mounted read-only.
1.22 aaron 233: .It Ic -group Ar gname
1.1 deraadt 234: True if the file belongs to the group
1.25 aaron 235: .Ar gname .
1.1 deraadt 236: If
237: .Ar gname
238: is numeric and there is no such group name, then
239: .Ar gname
1.16 aaron 240: is treated as a group ID.
1.27 deraadt 241: .It Ic -iname Ar pattern
242: True if the last component of the pathname being examined
243: matches
244: .Ar pattern .
245: Case insensitive.
1.22 aaron 246: .It Ic -inum Ar n
1.1 deraadt 247: True if the file has inode number
1.25 aaron 248: .Ar n .
1.22 aaron 249: .It Ic -links Ar n
1.1 deraadt 250: True if the file has
251: .Ar n
252: links.
253: .It Ic -ls
254: This primary always evaluates to true.
255: The following information for the current file is written to standard output:
1.22 aaron 256: its inode number, size in 512-byte blocks, file permissions, number of hard
1.1 deraadt 257: links, owner, group, size in bytes, last modification time, and pathname.
258: If the file is a block or character special file, the major and minor numbers
259: will be displayed instead of the size in bytes.
1.22 aaron 260: If the file is a symbolic link, the pathname of the linked-to file will be
261: displayed preceded by
262: .Dq \-> .
263: The format is identical to that produced by
264: .Dq ls \-dgils .
1.6 tholo 265: .It Ic -maxdepth Ar n
1.7 tholo 266: True if the current search depth is less than or equal to what is specified in
267: .Ar n .
268: .It Ic -mindepth Ar n
269: True if the current search depth is at least what is specified in
1.6 tholo 270: .Ar n .
1.22 aaron 271: .It Ic -mmin Ar n
1.15 deraadt 272: True if the difference between the file last modification time and the time
1.22 aaron 273: .Nm
1.20 aaron 274: was started, rounded up to the next full minute, is
1.15 deraadt 275: .Ar n
1.20 aaron 276: minutes.
1.22 aaron 277: .It Ic -mtime Ar n
1.1 deraadt 278: True if the difference between the file last modification time and the time
1.22 aaron 279: .Nm
280: was started, rounded up to the next full 24-hour period, is
1.1 deraadt 281: .Ar n
1.22 aaron 282: 24-hour periods.
283: .It Ic -name Ar pattern
1.1 deraadt 284: True if the last component of the pathname being examined matches
1.25 aaron 285: .Ar pattern .
1.22 aaron 286: Special shell pattern matching characters
287: .Pf ( Ql [ ,
288: .Ql \&] ,
289: .Ql * ,
290: and
291: .Ql ? )
1.1 deraadt 292: may be used as part of
1.25 aaron 293: .Ar pattern .
1.1 deraadt 294: These characters may be matched explicitly by escaping them with a
1.22 aaron 295: backslash
296: .Pq Ql \e .
297: .It Ic -newer Ar file
1.1 deraadt 298: True if the current file has a more recent last modification time than
1.25 aaron 299: .Ar file .
1.1 deraadt 300: .It Ic -nouser
301: True if the file belongs to an unknown user.
302: .It Ic -nogroup
303: True if the file belongs to an unknown group.
1.22 aaron 304: .It Ic \&-ok Ar utility Op argument ... ;
305: Identical to the
306: .Ic -exec
307: primary with the exception that
308: .Nm
309: requests user affirmation for the execution of
310: .Ar utility
311: by printing
312: a message to the terminal and reading a response.
313: If the response is other than
314: .Sq y
315: the command is not executed and the
316: value of the
317: .Ic \&ok
318: expression is false.
319: .It Ic -path Ar pattern
1.1 deraadt 320: True if the pathname being examined matches
1.25 aaron 321: .Ar pattern .
1.22 aaron 322: Special shell pattern matching characters
323: .Pf ( Ql [ ,
324: .Ql \&] ,
325: .Ql * ,
326: and
327: .Ql ? )
1.1 deraadt 328: may be used as part of
1.25 aaron 329: .Ar pattern .
1.1 deraadt 330: These characters may be matched explicitly by escaping them with a
1.22 aaron 331: backslash
332: .Pq Ql \e .
333: Slashes
334: .Pq Ql /
335: are treated as normal characters and do not have to be
1.1 deraadt 336: matched explicitly.
1.21 aaron 337: .It Xo
338: .Ic -perm
339: .Op Fl
340: .Ar mode
341: .Xc
1.1 deraadt 342: The
343: .Ar mode
344: may be either symbolic (see
1.25 aaron 345: .Xr chmod 1 )
1.1 deraadt 346: or an octal number.
347: If the mode is symbolic, a starting value of zero is assumed and the
1.16 aaron 348: mode sets or clears permissions without regard to the process's file mode
1.1 deraadt 349: creation mask.
350: If the mode is octal, only bits 07777
351: .Pf ( Dv S_ISUID
352: |
353: .Dv S_ISGID
354: |
355: .Dv S_ISTXT
356: |
357: .Dv S_IRWXU
358: |
359: .Dv S_IRWXG
360: |
361: .Dv S_IRWXO )
362: of the file's mode bits participate
363: in the comparison.
1.22 aaron 364: If the mode is preceded by a dash
365: .Pq Sq \- ,
366: this primary evaluates to true
1.1 deraadt 367: if at least all of the bits in the mode are set in the file's mode bits.
1.22 aaron 368: If the mode is not preceded by a dash, this primary evaluates to
1.16 aaron 369: true if the bits in the mode exactly match the file's mode bits.
1.22 aaron 370: Note, the first character of a symbolic mode may not be a dash.
1.1 deraadt 371: .It Ic -print
372: This primary always evaluates to true.
373: It prints the pathname of the current file to standard output, followed
1.22 aaron 374: by a newline
375: .Pq Ql \en
376: character.
1.1 deraadt 377: If neither
378: .Ic -exec ,
379: .Ic -ls ,
380: .Ic -ok ,
381: nor
382: .Ic -print0
383: is specified, the given expression shall be effectively replaced by
1.22 aaron 384: .Cm \&( Ns Ar given\& expression Ns Cm \&)
1.1 deraadt 385: .Ic -print .
386: .It Ic -print0
387: This primary always evaluates to true.
388: It prints the pathname of the current file to standard output, followed
389: by a null character.
390: .It Ic -prune
391: This primary always evaluates to true.
392: It causes
1.22 aaron 393: .Nm
1.1 deraadt 394: to not descend into the current file.
395: Note, the
396: .Ic -prune
397: primary has no effect if the
398: .Fl d
399: option was specified.
1.22 aaron 400: .It Ic -size Ar n Ns Op Cm c
401: True if the file's size, rounded up, in 512-byte blocks is
1.25 aaron 402: .Ar n .
1.1 deraadt 403: If
404: .Ar n
1.22 aaron 405: is followed by a
406: .Sq c ,
407: then the primary is true if the
1.1 deraadt 408: file's size is
409: .Ar n
410: bytes.
1.22 aaron 411: .It Ic -type Ar t
1.1 deraadt 412: True if the file is of the specified type.
413: Possible file types are as follows:
414: .Pp
415: .Bl -tag -width flag -offset indent -compact
1.3 deraadt 416: .It Cm W
1.22 aaron 417: whiteout (currently, these won't even be visible without also specifying
1.19 espie 418: .Fl W )
1.1 deraadt 419: .It Cm b
420: block special
421: .It Cm c
422: character special
423: .It Cm d
424: directory
425: .It Cm f
426: regular file
427: .It Cm l
428: symbolic link
429: .It Cm p
430: FIFO
431: .It Cm s
432: socket
433: .El
434: .Pp
1.22 aaron 435: .It Ic -user Ar uname
1.1 deraadt 436: True if the file belongs to the user
1.25 aaron 437: .Ar uname .
1.1 deraadt 438: If
439: .Ar uname
440: is numeric and there is no such user name, then
441: .Ar uname
1.16 aaron 442: is treated as a user ID.
1.1 deraadt 443: .El
444: .Pp
445: All primaries which take a numeric argument allow the number to be
1.22 aaron 446: preceded by a plus sign
447: .Pq Ql +
448: or a minus sign
449: .Pq Ql \- .
450: A preceding plus sign means
451: .Dq more than n ,
452: a preceding minus sign means
453: .Dq less than n ,
454: and neither means
455: .Dq exactly n .
1.1 deraadt 456: .Sh OPERATORS
457: The primaries may be combined using the following operators.
458: The operators are listed in order of decreasing precedence.
1.22 aaron 459: .Bl -tag -width (expression)
460: .It Cm \&( Ns Ar expression Ns Cm \&)
1.1 deraadt 461: This evaluates to true if the parenthesized expression evaluates to
462: true.
463: .Pp
1.22 aaron 464: .It Cm \&! Ns Ar expression
1.1 deraadt 465: This is the unary
466: .Tn NOT
467: operator.
468: It evaluates to true if the expression is false.
469: .Pp
1.22 aaron 470: .It Ar expression Cm -and Ar expression
471: .It Ar expression expression
1.1 deraadt 472: The
473: .Cm -and
474: operator is the logical
475: .Tn AND
476: operator.
477: As it is implied by the juxtaposition of two expressions it does not
478: have to be specified.
479: The expression evaluates to true if both expressions are true.
480: The second expression is not evaluated if the first expression is false.
481: .Pp
1.22 aaron 482: .It Ar expression Cm -or Ar expression
1.1 deraadt 483: The
484: .Cm -or
485: operator is the logical
486: .Tn OR
487: operator.
488: The expression evaluates to true if either the first or the second expression
489: is true.
490: The second expression is not evaluated if the first expression is true.
491: .El
492: .Pp
493: All operands and primaries must be separate arguments to
1.22 aaron 494: .Nm find .
1.1 deraadt 495: Primaries which themselves take arguments expect each argument
496: to be a separate argument to
1.22 aaron 497: .Nm find .
1.1 deraadt 498: .Sh EXAMPLES
499: The following examples are shown as given to the shell:
500: .Bl -tag -width findx
501: .It Li "find / \e! -name \*q*.c\*q -print"
1.22 aaron 502: Print out a list of all the files whose names do not end in
1.31 deraadt 503: .Dq \&.c .
1.1 deraadt 504: .It Li "find / -newer ttt -user wnj -print"
1.22 aaron 505: Print out a list of all the files owned by user
506: .Dq wnj
507: that are newer
508: than the file
509: .Dq ttt .
1.1 deraadt 510: .It Li "find / \e! \e( -newer ttt -user wnj \e) -print"
1.22 aaron 511: Print out a list of all the files which are not both newer than
512: .Dq ttt
513: and owned by
514: .Dq wnj .
1.1 deraadt 515: .It Li "find / \e( -newer ttt -or -user wnj \e) -print"
1.22 aaron 516: Print out a list of all the files that are either owned by
517: .Dq wnj
518: or
519: that are newer than
520: .Dq ttt .
1.1 deraadt 521: .El
522: .Sh SEE ALSO
1.29 millert 523: .Xr chflags 1 ,
1.1 deraadt 524: .Xr chmod 1 ,
525: .Xr locate 1 ,
1.23 aaron 526: .Xr whereis 1 ,
527: .Xr which 1 ,
1.1 deraadt 528: .Xr stat 2 ,
529: .Xr fts 3 ,
1.16 aaron 530: .Xr getgrent 3 ,
1.1 deraadt 531: .Xr getpwent 3 ,
532: .Xr strmode 3 ,
533: .Xr symlink 7
534: .Sh STANDARDS
535: The
1.22 aaron 536: .Nm
1.1 deraadt 537: utility syntax is a superset of the syntax specified by the
538: .St -p1003.2
539: standard.
540: .Pp
1.13 deraadt 541: The options and primaries
1.18 deraadt 542: .Ic -amin ,
543: .Ic -cmin ,
1.9 tholo 544: .Ic -empty ,
1.1 deraadt 545: .Ic -follow ,
546: .Ic -fstype ,
1.27 deraadt 547: .Ic -iname ,
1.2 deraadt 548: .Ic -inum ,
1.1 deraadt 549: .Ic -links ,
1.9 tholo 550: .Ic -ls ,
1.18 deraadt 551: .Ic -mmin ,
1.9 tholo 552: .Ic -maxdepth ,
1.13 deraadt 553: .Ic -mindepth ,
554: .Ic -execdir ,
1.1 deraadt 555: and
556: .Ic -print0
1.13 deraadt 557: are extensions to
1.1 deraadt 558: .St -p1003.2 .
1.27 deraadt 559: The
560: .Ic -iname
561: option was inspired by GNU find.
1.1 deraadt 562: .Pp
563: Historically, the
564: .Fl d ,
1.26 aaron 565: .Fl H ,
1.1 deraadt 566: and
567: .Fl x
1.14 deraadt 568: options were implemented using the primaries
569: .Ic -depth ,
570: .Ic -follow ,
571: and
572: .Ic -xdev .
1.1 deraadt 573: These primaries always evaluated to true.
574: As they were really global variables that took effect before the traversal
575: began, some legal expressions could have unexpected results.
1.22 aaron 576: An example is the expression
577: .Dq \-print \-o \-depth .
578: As
579: .Cm \-print
580: always evaluates to true, the standard order of evaluation
581: implies that
582: .Cm \-depth
583: would never be evaluated.
1.1 deraadt 584: This is not the case.
585: .Pp
1.22 aaron 586: The operator
587: .Cm -or
588: was implemented as
589: .Cm \-o ,
590: and the operator
591: .Cm -and
592: was implemented as
593: .Cm \-a .
1.1 deraadt 594: .Pp
595: Historic implementations of the
596: .Ic -exec
597: and
598: .Ic -ok
1.22 aaron 599: primaries did not replace the string
600: .Qq {}
601: in the utility name or the
1.1 deraadt 602: utility arguments if it had preceding or following non-whitespace characters.
603: This version replaces it no matter where in the utility name or arguments
604: it appears.
1.30 aaron 605: .Sh HISTORY
606: A
607: .Nm
608: command appeared in
609: .At v1 .
1.1 deraadt 610: .Sh BUGS
611: The special characters used by
1.22 aaron 612: .Nm
1.1 deraadt 613: are also special characters to many shell programs.
1.22 aaron 614: In particular, the characters
615: .Ql * ,
616: .Ql [ ,
617: .Ql \&] ,
618: .Ql ? ,
619: .Ql ( ,
620: .Ql \&) ,
621: .Ql ! ,
622: .Ql \e ,
623: and
624: .Ql \&;
625: may have to be escaped from the shell.
1.1 deraadt 626: .Pp
627: As there is no delimiter separating options and file names or file
628: names and the
629: .Ar expression ,
1.22 aaron 630: it is difficult to specify files named
631: .Dq -xdev
632: or
633: .Dq ! .
1.1 deraadt 634: These problems are handled by the
635: .Fl f
636: option and the
637: .Xr getopt 3
1.22 aaron 638: .Dq \-\-
639: construct.
1.19 espie 640: .Pp
641: The
642: .Fl W
1.26 aaron 643: option is probably not the most elegant way to handle whiteouts.
644: It may be replaced by a more sophisticated algorithm eventually.