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