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 July 26, 2025 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 -executable 469Matches files which are executable by the current user. 470This test makes use of the 471.Xr access 2 472system call, and so can be fooled by NFS servers which do UID mapping (or root-squashing). 473This is a GNU find extension. 474.It Ic -flags Oo Cm - Ns | Ns Cm + Oc Ns Ar flags , Ns Ar notflags 475The flags are specified using symbolic names (see 476.Xr chflags 1 ) . 477Those with the 478.Qq Li no 479prefix (except 480.Qq Li nodump ) 481are said to be 482.Ar notflags . 483Flags in 484.Ar flags 485are checked to be set, and flags in 486.Ar notflags 487are checked to be not set. 488Note that this is different from 489.Ic -perm , 490which only allows the user to specify mode bits that are set. 491.Pp 492If flags are preceded by a dash 493.Pq Dq Li - , 494this primary evaluates to true 495if at least all of the bits in 496.Ar flags 497and none of the bits in 498.Ar notflags 499are set in the file's flags bits. 500If flags are preceded by a plus 501.Pq Dq Li + , 502this primary evaluates to true 503if any of the bits in 504.Ar flags 505is set in the file's flags bits, 506or any of the bits in 507.Ar notflags 508is not set in the file's flags bits. 509Otherwise, 510this primary evaluates to true 511if the bits in 512.Ar flags 513exactly match the file's flags bits, 514and none of the 515.Ar flags 516bits match those of 517.Ar notflags . 518.It Ic -fprint Ar filename 519This primary always evaluates to true. 520This creates 521.Ar filename 522or truncates the file if it already exists. 523The file is created at startup. 524It writes the pathname of the current file to this file, followed 525by a newline character. 526The file will be empty if no files are matched. 527.Pp 528.It Ic -fprint0 Ar filename 529This primary always evaluates to true. 530This creates 531.Ar filename 532or truncates the file if it already exists. 533The file is created at startup. 534It writes the pathname of the current file to this file, followed 535by an ASCII 536.Dv NUL 537character (character code 0). 538The file will be empty if no files are matched. 539.Pp 540.It Ic -fstype Ar type 541True if the file is contained in a file system of type 542.Ar type . 543The 544.Xr lsvfs 1 545command can be used to find out the types of file systems 546that are available on the system. 547In addition, there are two pseudo-types, 548.Dq Li local 549and 550.Dq Li rdonly . 551The former matches any file system physically mounted on the system where 552the 553.Nm 554is being executed and the latter matches any file system which is 555mounted read-only. 556.It Ic -gid Ar gname 557The same thing as 558.Ic -group Ar gname 559for compatibility with GNU find. 560GNU find imposes a restriction that 561.Ar gname 562is numeric, while 563.Nm 564does not. 565.It Ic -group Ar gname 566True if the file belongs to the group 567.Ar gname . 568If 569.Ar gname 570is numeric and there is no such group name, then 571.Ar gname 572is treated as a group ID. 573.It Ic -ignore_readdir_race 574Ignore errors because a file or a directory is deleted 575after reading the name from a directory. 576This option does not affect errors occurring on starting points. 577.It Ic -ilname Ar pattern 578Like 579.Ic -lname , 580but the match is case insensitive. 581This is a GNU find extension. 582.It Ic -iname Ar pattern 583Like 584.Ic -name , 585but the match is case insensitive. 586.It Ic -inum Ar n 587True if the file has inode number 588.Ar n . 589.It Ic -ipath Ar pattern 590Like 591.Ic -path , 592but the match is case insensitive. 593.It Ic -iregex Ar pattern 594Like 595.Ic -regex , 596but the match is case insensitive. 597.It Ic -iwholename Ar pattern 598The same thing as 599.Ic -ipath , 600for GNU find compatibility. 601.It Ic -links Ar n 602True if the file has 603.Ar n 604links. 605.It Ic -lname Ar pattern 606Like 607.Ic -name , 608but the contents of the symbolic link are matched instead of the file 609name. 610Note that this only matches broken symbolic links 611if symbolic links are being followed. 612This is a GNU find extension. 613.It Ic -ls 614This primary always evaluates to true. 615The following information for the current file is written to standard output: 616its inode number, size in 512-byte blocks, file permissions, number of hard 617links, owner, group, size in bytes, last modification time, and pathname. 618If the file is a block or character special file, the device number 619will be displayed instead of the size in bytes. 620If the file is a symbolic link, the pathname of the linked-to file will be 621displayed preceded by 622.Dq Li -> . 623The format is identical to that produced by 624.Bk -words 625.Dq Nm ls Fl dils . 626.Ek 627.It Ic -maxdepth Ar n 628Always true; descend at most 629.Ar n 630directory levels below the command line arguments. 631If any 632.Ic -maxdepth 633primary is specified, it applies to the entire expression even if it would 634not normally be evaluated. 635.Dq Ic -maxdepth Li 0 636limits the whole search to the command line arguments. 637.It Ic -mindepth Ar n 638Always true; do not apply any tests or actions at levels less than 639.Ar n . 640If any 641.Ic -mindepth 642primary is specified, it applies to the entire expression even if it would 643not normally be evaluated. 644.Dq Ic -mindepth Li 1 645processes all but the command line arguments. 646.It Ic -mmin Oo Cm - Ns | Ns Cm + Oc Ns Ar n 647True if the difference between the file last modification time and the time 648.Nm 649was started, rounded up to the next full minute, is 650more than 651.Ar n 652.Pq + Ns Ar n , 653less than 654.Ar n 655.Pq - Ns Ar n , 656or exactly 657.Ar n 658minutes ago. 659.It Ic -mnewer Ar file 660Same as 661.Ic -newer . 662.It Ic -mount 663The same thing as 664.Ic -xdev , 665for GNU find compatibility. 666.It Ic -mtime Ar n Ns Op Cm smhdw 667If no units are specified, this primary evaluates to 668true if the difference between the file last modification time and the time 669.Nm 670was started, rounded up to the next full 24-hour period, is 671.Ar n 67224-hour periods. 673.Pp 674If units are specified, this primary evaluates to 675true if the difference between the file last modification time and the time 676.Nm 677was started is exactly 678.Ar n 679units. 680Please refer to the 681.Ic -atime 682primary description for information on supported time units. 683.It Ic -name Ar pattern 684True if the last component of the pathname being examined matches 685.Ar pattern . 686Special shell pattern matching characters 687.Dq ( Li \&[ , 688.Dq Li \&] , 689.Dq Li * , 690and 691.Dq Li \&? ) 692may be used as part of 693.Ar pattern . 694These characters may be matched explicitly by escaping them with a 695backslash 696.Pq Dq Li \e . 697.It Ic -newer Ar file 698True if the current file has a more recent last modification time than 699.Ar file . 700.It Ic -newer Ns Ar X Ns Ar Y Ar file 701True if the current file has a more recent last access time 702.Pq Ar X Ns = Ns Cm a , 703inode creation time 704.Pq Ar X Ns = Ns Cm B , 705change time 706.Pq Ar X Ns = Ns Cm c , 707or modification time 708.Pq Ar X Ns = Ns Cm m 709than the last access time 710.Pq Ar Y Ns = Ns Cm a , 711inode creation time 712.Pq Ar Y Ns = Ns Cm B , 713change time 714.Pq Ar Y Ns = Ns Cm c , 715or modification time 716.Pq Ar Y Ns = Ns Cm m 717of 718.Ar file . 719In addition, if 720.Ar Y Ns = Ns Cm t , 721then 722.Ar file 723is instead interpreted as a direct date specification of the form 724understood by ISO8601 or RFC822. 725Note that 726.Ic -newermm 727is equivalent to 728.Ic -newer . 729.It Ic -nogroup 730True if the file belongs to an unknown group. 731.It Ic -noignore_readdir_race 732Turn off the effect of 733.Ic -ignore_readdir_race . 734This is default behaviour. 735.It Ic -noleaf 736This option is for GNU find compatibility. 737In GNU find it disables an optimization not relevant to 738.Nm , 739so it is ignored. 740.It Ic -nouser 741True if the file belongs to an unknown user. 742.It Ic -ok Ar utility Oo Ar argument ... Oc Li \&; 743The 744.Ic -ok 745primary is identical to the 746.Ic -exec 747primary with the exception that 748.Nm 749requests user affirmation for the execution of the 750.Ar utility 751by printing 752a message to the terminal and reading a response. 753If the response is not affirmative 754.Ql ( y 755in the 756.Dq Li POSIX 757locale), 758the command is not executed and the 759value of the 760.Ic -ok 761expression is false. 762.It Ic -okdir Ar utility Oo Ar argument ... Oc Li \&; 763The 764.Ic -okdir 765primary is identical to the 766.Ic -execdir 767primary with the same exception as described for the 768.Ic -ok 769primary. 770.It Ic -path Ar pattern 771True if the pathname being examined matches 772.Ar pattern . 773Special shell pattern matching characters 774.Dq ( Li \&[ , 775.Dq Li \&] , 776.Dq Li * , 777and 778.Dq Li \&? ) 779may be used as part of 780.Ar pattern . 781These characters may be matched explicitly by escaping them with a 782backslash 783.Pq Dq Li \e . 784Slashes 785.Pq Dq Li / 786are treated as normal characters and do not have to be 787matched explicitly. 788.It Ic -perm Oo Cm - Ns | Ns Cm + Ns | Ns Cm / Oc Ns Ar mode 789The 790.Ar mode 791may be either symbolic (see 792.Xr chmod 1 ) 793or an octal number. 794If the 795.Ar mode 796is symbolic, a starting value of zero is assumed and the 797.Ar mode 798sets or clears permissions without regard to the process' file mode 799creation mask. 800If the 801.Ar mode 802is octal, only bits 07777 803.Pq Dv S_ISUID | S_ISGID | S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO 804of the file's mode bits participate 805in the comparison. 806If the 807.Ar mode 808is preceded by a dash 809.Pq Dq Li - , 810this primary evaluates to true 811if at least all of the bits in the 812.Ar mode 813are set in the file's mode bits. 814If the 815.Ar mode 816is preceded by a plus 817.Pq Dq Li + 818this primary evaluates to true 819if any of the bits in the 820.Ar mode 821are set in the file's mode bits. 822A slash 823.Pq Dq Li / 824is also accepted with the same meaning as plus for compatibility with GNU find. 825Otherwise, this primary evaluates to true if 826the bits in the 827.Ar mode 828exactly match the file's mode bits. 829Note, the first character of a symbolic mode may not be a dash 830.Pq Dq Li - . 831.It Ic -print 832This primary always evaluates to true. 833It prints the pathname of the current file to standard output. 834If none of 835.Ic -exec , -ls , -print0 , 836or 837.Ic -ok 838is specified, the given expression shall be effectively replaced by 839.Cm \&( Ar "given expression" Cm \&) Ic -print . 840.It Ic -print0 841This primary always evaluates to true. 842It prints the pathname of the current file to standard output, followed by an 843ASCII 844.Dv NUL 845character (character code 0). 846.It Ic -printf Ar fmt 847This primary always evaluates to true. 848It prints information about the file, interpreting 849.Sq \ 850and 851.Sq % 852escape sequences as described in the PRINTF FORMATS section. 853Unlike 854.Ic -print , 855.Ic -printf 856does not add a newline automatically. 857.It Ic -prune 858This primary always evaluates to true. 859It causes 860.Nm 861to not descend into the current file. 862Note, the 863.Ic -prune 864primary has no effect if the 865.Fl d 866option was specified. 867.It Ic -quit 868Causes 869.Nm 870to terminate immediately. 871.It Ic -readable 872Matches files which are readable by the current user. 873This test makes use of the 874.Xr access 2 875system call, and so can be fooled by NFS servers which do UID mapping (or root-squashing). 876This is a GNU find extension. 877.It Ic -regex Ar pattern 878True if the whole path of the file matches 879.Ar pattern 880using regular expression. 881To match a file named 882.Dq Pa ./foo/xyzzy , 883you can use the regular expression 884.Dq Li ".*/[xyz]*" 885or 886.Dq Li ".*/foo/.*" , 887but not 888.Dq Li xyzzy 889or 890.Dq Li /foo/ . 891.It Ic -samefile Ar name 892True if the file is a hard link to 893.Ar name . 894If the command option 895.Ic -L 896is specified, it is also true if the file is a symbolic link and 897points to 898.Ar name . 899.It Ic -size Ar n Ns Op Cm ckMGTP 900True if the file's size, rounded up, in 512-byte blocks is 901.Ar n . 902If 903.Ar n 904is followed by a 905.Cm c , 906then the primary is true if the 907file's size is 908.Ar n 909bytes (characters). 910Similarly if 911.Ar n 912is followed by a scale indicator then the file's size is compared to 913.Ar n 914scaled as: 915.Pp 916.Bl -tag -width indent -compact 917.It Cm k 918kilobytes (1024 bytes) 919.It Cm M 920megabytes (1024 kilobytes) 921.It Cm G 922gigabytes (1024 megabytes) 923.It Cm T 924terabytes (1024 gigabytes) 925.It Cm P 926petabytes (1024 terabytes) 927.El 928.It Ic -sparse 929True if the current file is sparse, 930i.e. has fewer blocks allocated than expected based on its size in bytes. 931This might also match files that have been compressed by the filesystem. 932.It Ic -type Ar t 933True if the file is of the specified type. 934Possible file types are as follows: 935.Pp 936.Bl -tag -width indent -compact 937.It Cm b 938block special 939.It Cm c 940character special 941.It Cm d 942directory 943.It Cm f 944regular file 945.It Cm l 946symbolic link 947.It Cm p 948FIFO 949.It Cm s 950socket 951.El 952.It Ic -uid Ar uname 953The same thing as 954.Ar -user Ar uname 955for compatibility with GNU find. 956GNU find imposes a restriction that 957.Ar uname 958is numeric, while 959.Nm 960does not. 961.It Ic -user Ar uname 962True if the file belongs to the user 963.Ar uname . 964If 965.Ar uname 966is numeric and there is no such user name, then 967.Ar uname 968is treated as a user ID. 969.It Ic -wholename Ar pattern 970The same thing as 971.Ic -path , 972for GNU find compatibility. 973.It Ic -writable 974Matches files which are writable by the current user. 975This test makes use of the 976.Xr access 2 977system call, and so can be fooled by NFS servers which do UID mapping (or root-squashing). 978This is a GNU find extension. 979.El 980.Sh OPERATORS 981The primaries may be combined using the following operators. 982The operators are listed in order of decreasing precedence. 983.Pp 984.Bl -tag -width indent -compact 985.It Cm \&( Ar expression Cm \&) 986This evaluates to true if the parenthesized expression evaluates to 987true. 988.Pp 989.It Cm \&! Ar expression 990.It Cm -not Ar expression 991This is the unary 992.Tn NOT 993operator. 994It evaluates to true if the expression is false. 995.Pp 996.It Cm -false 997Always false. 998.It Cm -true 999Always true. 1000.Pp 1001.It Ar expression Cm -and Ar expression 1002.It Ar expression expression 1003The 1004.Cm -and 1005operator is the logical 1006.Tn AND 1007operator. 1008As it is implied by the juxtaposition of two expressions it does not 1009have to be specified. 1010The expression evaluates to true if both expressions are true. 1011The second expression is not evaluated if the first expression is false. 1012.Pp 1013.It Ar expression Cm -or Ar expression 1014The 1015.Cm -or 1016operator is the logical 1017.Tn OR 1018operator. 1019The expression evaluates to true if either the first or the second expression 1020is true. 1021The second expression is not evaluated if the first expression is true. 1022.El 1023.Pp 1024All operands and primaries must be separate arguments to 1025.Nm . 1026Primaries which themselves take arguments expect each argument 1027to be a separate argument to 1028.Nm . 1029.Sh PRINTF FORMATS 1030The following 1031.Sq \e 1032escapes are recognized: 1033.Bl -tag -width Ds -offset indent -compact 1034.It Cm \ea 1035Write a <bell> character. 1036.It Cm \eb 1037Write a <backspace> character. 1038.It Cm \ec 1039Writes no characters, but terminates the string and flushes the output so far 1040after each match. 1041.It Cm \ef 1042Write a <form-feed> character. 1043.It Cm \en 1044Write a <new-line> character. 1045.It Cm \er 1046Write a <carriage return> character. 1047.It Cm \et 1048Write a <tab> character. 1049.It Cm \ev 1050Write a <vertical tab> character. 1051.It Cm \e\' 1052Write a <single quote> character. 1053.It Cm \e\e 1054Write a backslash character. 1055.It Cm \e Ns Ar num 1056Write a byte whose 1057value is the 1-, 2-, or 3-digit 1058octal number 1059.Ar num . 1060Multibyte characters can be constructed using multiple 1061.Cm \e Ns Ar num 1062sequences. 1063.El 1064.Pp 1065Each format specification is introduced by the percent character 1066(``%''). 1067The remainder of the format specification includes, 1068in the following order: 1069.Bl -tag -width Ds 1070.It "Zero or more of the following flags:" 1071.Bl -tag -width Ds 1072.It Cm # 1073A `#' character, has no effect on almost all formats. 1074It is not yet implemented. 1075.It Cm \&\- 1076A minus sign `\-' which specifies 1077.Em left adjustment 1078of the output in the indicated field; 1079It is not yet implemented. 1080.It "Field Width:" 1081An optional digit string specifying a 1082.Em field width ; 1083if the output string has fewer bytes than the field width it will 1084be blank-padded on the left (or right, if the left-adjustment indicator 1085has been given) to make up the field width (note that a leading zero 1086is a flag, but an embedded zero is part of a field width); 1087It is not yet implemented. 1088.It Precision: 1089An optional period, 1090.Sq Cm \&.\& , 1091followed by an optional digit string giving a 1092.Em precision 1093which specifies the maximum number of bytes to be printed 1094from a string; if the digit string is missing, the precision is treated 1095as zero; 1096It is not yet implemented. 1097.It Format: 1098One or two characters, described below, which indicates the information to display. 1099.Bl -tag -width Ds 1100.It p 1101Path to file 1102.It f 1103Filename without directories. 1104.It h 1105Path relative to the starting point, or '.' if that's empty for some reason. 1106.It P 1107Unimplemented -- File with command line arg. 1108.It H 1109Unimplemented -- Command line arg. 1110.It g 1111gid in human readable form. 1112.It G 1113gid as a number. 1114.It h 1115uid in human readable form. 1116.It U 1117uid as a number. 1118.It m 1119File permission mode in octal. 1120.It M 1121File mode in 1122.Xr ls 1 1123standard form. 1124.It k 1125File size in KiB (units of 1024 bytes). 1126.It b 1127File size in blocks (Always 512 byte units, even if underlying storage 1128size differs). 1129.It s 1130Size in bytes of the file. 1131.It S 1132Sparseness of the file. 1133The blocks the file occupies times 512 divided by the file size. 1134.It d 1135Depth in the tree 1136.It D 1137Device number for the file. 1138.It F 1139Unimplemented -- Filesystem type where the file resides. 1140.It l 1141Object of the symbolic link. 1142.It i 1143Inode of the file. 1144.It n 1145Number of hard links. 1146.It y 1147A single character representing the type of the file. 1148.It Y 1149A single character representing the type of the file. 1150If the file is a symbolic link, show information for the target of the 1151link instead, or 1152.Sq L 1153if the link loops, 1154.Sq N 1155if the target does not exist, or 1156.Sq ? 1157if any other error occurs while attempting to determine the type of 1158the target. 1159.It a 1160Access time of the file. 1161.It A 1162Access time of the file in strftime format. 1163Takes an additional argument. 1164.It B 1165Birth time of the file in strftime format. 1166Takes an additional argument. 1167.It c 1168Creation time of the file. 1169.It C 1170Creation time of the file in strftime format. 1171Takes an additional argument. 1172.It t 1173Modification time of the file. 1174.It T 1175Modification time of the file in strftime format. 1176Takes an additional argument. 1177.El 1178Any format not listed is not supported, though the error changes. 1179.El 1180.El 1181.Sh ENVIRONMENT 1182The 1183.Ev LANG , LC_ALL , LC_COLLATE , LC_CTYPE , LC_MESSAGES 1184and 1185.Ev LC_TIME 1186environment variables affect the execution of the 1187.Nm 1188utility as described in 1189.Xr environ 7 . 1190.Sh EXAMPLES 1191The following examples are shown as given to the shell: 1192.Bl -tag -width indent 1193.It Li "find / \e! -name \*q*.c\*q -print" 1194Print out a list of all the files whose names do not end in 1195.Pa .c . 1196.It Li "find / -newer ttt -user wnj -print" 1197Print out a list of all the files owned by user 1198.Dq wnj 1199that are newer 1200than the file 1201.Pa ttt . 1202.It Li "find / \e! \e( -newer ttt -user wnj \e) -print" 1203Print out a list of all the files which are not both newer than 1204.Pa ttt 1205and owned by 1206.Dq wnj . 1207.It Li "find / \e( -newer ttt -or -user wnj \e) -print" 1208Print out a list of all the files that are either owned by 1209.Dq wnj 1210or that are newer than 1211.Pa ttt . 1212.It Li "find / -newerct '1 minute ago' -print" 1213Print out a list of all the files whose inode change time is more 1214recent than the current time minus one minute. 1215.It Li "find / -type f -exec echo {} \e;" 1216Use the 1217.Xr echo 1 1218command to print out a list of all the files. 1219.It Li "find -L /usr/ports/packages -type l -exec rm -- {} +" 1220Delete all broken symbolic links in 1221.Pa /usr/ports/packages . 1222.It Li "find /usr/src -name CVS -prune -o -depth +6 -print" 1223Find files and directories that are at least seven levels deep 1224in the working directory 1225.Pa /usr/src . 1226.It Li "find /usr/src -name CVS -prune -o -mindepth 7 -print" 1227Is not equivalent to the previous example, since 1228.Ic -prune 1229is not evaluated below level seven. 1230.El 1231.Sh COMPATIBILITY 1232The 1233.Ic -follow 1234primary is deprecated; the 1235.Fl L 1236option should be used instead. 1237See the 1238.Sx STANDARDS 1239section below for details. 1240.Sh SEE ALSO 1241.Xr chflags 1 , 1242.Xr chmod 1 , 1243.Xr locate 1 , 1244.Xr lsvfs 1 , 1245.Xr whereis 1 , 1246.Xr which 1 , 1247.Xr xargs 1 , 1248.Xr stat 2 , 1249.Xr acl 3 , 1250.Xr fts 3 , 1251.Xr getgrent 3 , 1252.Xr getpwent 3 , 1253.Xr strmode 3 , 1254.Xr ascii 7 , 1255.Xr re_format 7 , 1256.Xr symlink 7 1257.Sh STANDARDS 1258The 1259.Nm 1260utility syntax is a superset of the syntax specified by the 1261.St -p1003.1-2001 1262standard. 1263.Pp 1264All the single character options except 1265.Fl H 1266and 1267.Fl L 1268as well as 1269.Ic -amin , -anewer , -cmin , -cnewer , -delete , -empty , -fstype , 1270.Ic -iname , -inum , -iregex , -ls , -maxdepth , -mindepth , -mmin , 1271.Ic -not , -path , -print0 , -regex , -sparse 1272and all of the 1273.Fl B* 1274birthtime related primaries are extensions to 1275.St -p1003.1-2001 . 1276.Pp 1277Historically, the 1278.Fl d , L 1279and 1280.Fl x 1281options were implemented using the primaries 1282.Ic -depth , -follow , 1283and 1284.Ic -xdev . 1285These primaries always evaluated to true. 1286As they were really global variables that took effect before the traversal 1287began, some legal expressions could have unexpected results. 1288An example is the expression 1289.Ic -print Cm -o Ic -depth . 1290As 1291.Ic -print 1292always evaluates to true, the standard order of evaluation 1293implies that 1294.Ic -depth 1295would never be evaluated. 1296This is not the case. 1297.Pp 1298The operator 1299.Cm -or 1300was implemented as 1301.Cm -o , 1302and the operator 1303.Cm -and 1304was implemented as 1305.Cm -a . 1306.Pp 1307Historic implementations of the 1308.Ic -exec 1309and 1310.Ic -ok 1311primaries did not replace the string 1312.Dq Li {} 1313in the utility name or the 1314utility arguments if it had preceding or following non-whitespace characters. 1315This version replaces it no matter where in the utility name or arguments 1316it appears. 1317.Pp 1318The 1319.Fl E 1320option was inspired by the equivalent 1321.Xr grep 1 1322and 1323.Xr sed 1 1324options. 1325.Pp 1326The 1327.Ic -perm 1328primary accepts a leading slash 1329.Pq Dq Li / 1330as an alias for a leading plus 1331.Pq Dq Li + 1332for its argument as an extension of 1333.St -p1003.1-2001 1334to be compatible with GNU find. 1335.Sh HISTORY 1336A simple 1337.Nm 1338command appeared in 1339.At v1 1340and was removed in 1341.At v3 . 1342It was rewritten for 1343.At v5 1344and was later enhanced for the Programmer's Workbench (PWB). 1345These changes were later incorporated in 1346.At v7 . 1347.Sh BUGS 1348The special characters used by 1349.Nm 1350are also special characters to many shell programs. 1351In particular, the characters 1352.Dq Li * , 1353.Dq Li \&[ , 1354.Dq Li \&] , 1355.Dq Li \&? , 1356.Dq Li \&( , 1357.Dq Li \&) , 1358.Dq Li \&! , 1359.Dq Li \e 1360and 1361.Dq Li \&; 1362may have to be escaped from the shell. 1363.Pp 1364As there is no delimiter separating options and file names or file 1365names and the 1366.Ar expression , 1367it is difficult to specify files named 1368.Pa -xdev 1369or 1370.Pa \&! . 1371These problems are handled by the 1372.Fl f 1373option and the 1374.Xr getopt 3 1375.Dq Fl Fl 1376construct. 1377.Pp 1378The 1379.Ic -delete 1380primary does not interact well with other options that cause the file system 1381tree traversal options to be changed. 1382.Pp 1383The 1384.Ic -mindepth 1385and 1386.Ic -maxdepth 1387primaries are actually global options (as documented above). 1388They should 1389probably be replaced by options which look like options. 1390