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