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