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 January 21, 2024 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 -fstype Ar type 519True if the file is contained in a file system of type 520.Ar type . 521The 522.Xr lsvfs 1 523command can be used to find out the types of file systems 524that are available on the system. 525In addition, there are two pseudo-types, 526.Dq Li local 527and 528.Dq Li rdonly . 529The former matches any file system physically mounted on the system where 530the 531.Nm 532is being executed and the latter matches any file system which is 533mounted read-only. 534.It Ic -gid Ar gname 535The same thing as 536.Ic -group Ar gname 537for compatibility with GNU find. 538GNU find imposes a restriction that 539.Ar gname 540is numeric, while 541.Nm 542does not. 543.It Ic -group Ar gname 544True if the file belongs to the group 545.Ar gname . 546If 547.Ar gname 548is numeric and there is no such group name, then 549.Ar gname 550is treated as a group ID. 551.It Ic -ignore_readdir_race 552Ignore errors because a file or a directory is deleted 553after reading the name from a directory. 554This option does not affect errors occurring on starting points. 555.It Ic -ilname Ar pattern 556Like 557.Ic -lname , 558but the match is case insensitive. 559This is a GNU find extension. 560.It Ic -iname Ar pattern 561Like 562.Ic -name , 563but the match is case insensitive. 564.It Ic -inum Ar n 565True if the file has inode number 566.Ar n . 567.It Ic -ipath Ar pattern 568Like 569.Ic -path , 570but the match is case insensitive. 571.It Ic -iregex Ar pattern 572Like 573.Ic -regex , 574but the match is case insensitive. 575.It Ic -iwholename Ar pattern 576The same thing as 577.Ic -ipath , 578for GNU find compatibility. 579.It Ic -links Ar n 580True if the file has 581.Ar n 582links. 583.It Ic -lname Ar pattern 584Like 585.Ic -name , 586but the contents of the symbolic link are matched instead of the file 587name. 588Note that this only matches broken symbolic links 589if symbolic links are being followed. 590This is a GNU find extension. 591.It Ic -ls 592This primary always evaluates to true. 593The following information for the current file is written to standard output: 594its inode number, size in 512-byte blocks, file permissions, number of hard 595links, owner, group, size in bytes, last modification time, and pathname. 596If the file is a block or character special file, the device number 597will be displayed instead of the size in bytes. 598If the file is a symbolic link, the pathname of the linked-to file will be 599displayed preceded by 600.Dq Li -> . 601The format is identical to that produced by 602.Bk -words 603.Dq Nm ls Fl dgils . 604.Ek 605.It Ic -maxdepth Ar n 606Always true; descend at most 607.Ar n 608directory levels below the command line arguments. 609If any 610.Ic -maxdepth 611primary is specified, it applies to the entire expression even if it would 612not normally be evaluated. 613.Dq Ic -maxdepth Li 0 614limits the whole search to the command line arguments. 615.It Ic -mindepth Ar n 616Always true; do not apply any tests or actions at levels less than 617.Ar n . 618If any 619.Ic -mindepth 620primary is specified, it applies to the entire expression even if it would 621not normally be evaluated. 622.Dq Ic -mindepth Li 1 623processes all but the command line arguments. 624.It Ic -mmin Oo Cm - Ns | Ns Cm + Oc Ns Ar n 625True if the difference between the file last modification time and the time 626.Nm 627was started, rounded up to the next full minute, is 628more than 629.Ar n 630.Pq + Ns Ar n , 631less than 632.Ar n 633.Pq - Ns Ar n , 634or exactly 635.Ar n 636minutes ago. 637.It Ic -mnewer Ar file 638Same as 639.Ic -newer . 640.It Ic -mount 641The same thing as 642.Ic -xdev , 643for GNU find compatibility. 644.It Ic -mtime Ar n Ns Op Cm smhdw 645If no units are specified, this primary evaluates to 646true if the difference between the file last modification time and the time 647.Nm 648was started, rounded up to the next full 24-hour period, is 649.Ar n 65024-hour periods. 651.Pp 652If units are specified, this primary evaluates to 653true if the difference between the file last modification time and the time 654.Nm 655was started is exactly 656.Ar n 657units. 658Please refer to the 659.Ic -atime 660primary description for information on supported time units. 661.It Ic -name Ar pattern 662True if the last component of the pathname being examined matches 663.Ar pattern . 664Special shell pattern matching characters 665.Dq ( Li \&[ , 666.Dq Li \&] , 667.Dq Li * , 668and 669.Dq Li \&? ) 670may be used as part of 671.Ar pattern . 672These characters may be matched explicitly by escaping them with a 673backslash 674.Pq Dq Li \e . 675.It Ic -newer Ar file 676True if the current file has a more recent last modification time than 677.Ar file . 678.It Ic -newer Ns Ar X Ns Ar Y Ar file 679True if the current file has a more recent last access time 680.Pq Ar X Ns = Ns Cm a , 681inode creation time 682.Pq Ar X Ns = Ns Cm B , 683change time 684.Pq Ar X Ns = Ns Cm c , 685or modification time 686.Pq Ar X Ns = Ns Cm m 687than the last access time 688.Pq Ar Y Ns = Ns Cm a , 689inode creation time 690.Pq Ar Y Ns = Ns Cm B , 691change time 692.Pq Ar Y Ns = Ns Cm c , 693or modification time 694.Pq Ar Y Ns = Ns Cm m 695of 696.Ar file . 697In addition, if 698.Ar Y Ns = Ns Cm t , 699then 700.Ar file 701is instead interpreted as a direct date specification of the form 702understood by ISO8601 or RFC822. 703Note that 704.Ic -newermm 705is equivalent to 706.Ic -newer . 707.It Ic -nogroup 708True if the file belongs to an unknown group. 709.It Ic -noignore_readdir_race 710Turn off the effect of 711.Ic -ignore_readdir_race . 712This is default behaviour. 713.It Ic -noleaf 714This option is for GNU find compatibility. 715In GNU find it disables an optimization not relevant to 716.Nm , 717so it is ignored. 718.It Ic -nouser 719True if the file belongs to an unknown user. 720.It Ic -ok Ar utility Oo Ar argument ... Oc Li \&; 721The 722.Ic -ok 723primary is identical to the 724.Ic -exec 725primary with the exception that 726.Nm 727requests user affirmation for the execution of the 728.Ar utility 729by printing 730a message to the terminal and reading a response. 731If the response is not affirmative 732.Ql ( y 733in the 734.Dq Li POSIX 735locale), 736the command is not executed and the 737value of the 738.Ic -ok 739expression is false. 740.It Ic -okdir Ar utility Oo Ar argument ... Oc Li \&; 741The 742.Ic -okdir 743primary is identical to the 744.Ic -execdir 745primary with the same exception as described for the 746.Ic -ok 747primary. 748.It Ic -path Ar pattern 749True if the pathname being examined matches 750.Ar pattern . 751Special shell pattern matching characters 752.Dq ( Li \&[ , 753.Dq Li \&] , 754.Dq Li * , 755and 756.Dq Li \&? ) 757may be used as part of 758.Ar pattern . 759These characters may be matched explicitly by escaping them with a 760backslash 761.Pq Dq Li \e . 762Slashes 763.Pq Dq Li / 764are treated as normal characters and do not have to be 765matched explicitly. 766.It Ic -perm Oo Cm - Ns | Ns Cm + Ns | Ns Cm / Oc Ns Ar mode 767The 768.Ar mode 769may be either symbolic (see 770.Xr chmod 1 ) 771or an octal number. 772If the 773.Ar mode 774is symbolic, a starting value of zero is assumed and the 775.Ar mode 776sets or clears permissions without regard to the process' file mode 777creation mask. 778If the 779.Ar mode 780is octal, only bits 07777 781.Pq Dv S_ISUID | S_ISGID | S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO 782of the file's mode bits participate 783in the comparison. 784If the 785.Ar mode 786is preceded by a dash 787.Pq Dq Li - , 788this primary evaluates to true 789if at least all of the bits in the 790.Ar mode 791are set in the file's mode bits. 792If the 793.Ar mode 794is preceded by a plus 795.Pq Dq Li + 796this primary evaluates to true 797if any of the bits in the 798.Ar mode 799are set in the file's mode bits. 800A slash 801.Pq Dq Li / 802is also accepted with the same meaning as plus for compatibility with GNU find. 803Otherwise, this primary evaluates to true if 804the bits in the 805.Ar mode 806exactly match the file's mode bits. 807Note, the first character of a symbolic mode may not be a dash 808.Pq Dq Li - . 809.It Ic -print 810This primary always evaluates to true. 811It prints the pathname of the current file to standard output. 812If none of 813.Ic -exec , -ls , -print0 , 814or 815.Ic -ok 816is specified, the given expression shall be effectively replaced by 817.Cm \&( Ar "given expression" Cm \&) Ic -print . 818.It Ic -print0 819This primary always evaluates to true. 820It prints the pathname of the current file to standard output, followed by an 821ASCII 822.Dv NUL 823character (character code 0). 824.It Ic -prune 825This primary always evaluates to true. 826It causes 827.Nm 828to not descend into the current file. 829Note, the 830.Ic -prune 831primary has no effect if the 832.Fl d 833option was specified. 834.It Ic -quit 835Causes 836.Nm 837to terminate immediately. 838.It Ic -readable 839Matches files which are readable by the current user. 840This test makes use of the 841.Xr access 2 842system call, and so can be fooled by NFS servers which do UID mapping (or root-squashing). 843This is a GNU find extension. 844.It Ic -regex Ar pattern 845True if the whole path of the file matches 846.Ar pattern 847using regular expression. 848To match a file named 849.Dq Pa ./foo/xyzzy , 850you can use the regular expression 851.Dq Li ".*/[xyz]*" 852or 853.Dq Li ".*/foo/.*" , 854but not 855.Dq Li xyzzy 856or 857.Dq Li /foo/ . 858.It Ic -samefile Ar name 859True if the file is a hard link to 860.Ar name . 861If the command option 862.Ic -L 863is specified, it is also true if the file is a symbolic link and 864points to 865.Ar name . 866.It Ic -size Ar n Ns Op Cm ckMGTP 867True if the file's size, rounded up, in 512-byte blocks is 868.Ar n . 869If 870.Ar n 871is followed by a 872.Cm c , 873then the primary is true if the 874file's size is 875.Ar n 876bytes (characters). 877Similarly if 878.Ar n 879is followed by a scale indicator then the file's size is compared to 880.Ar n 881scaled as: 882.Pp 883.Bl -tag -width indent -compact 884.It Cm k 885kilobytes (1024 bytes) 886.It Cm M 887megabytes (1024 kilobytes) 888.It Cm G 889gigabytes (1024 megabytes) 890.It Cm T 891terabytes (1024 gigabytes) 892.It Cm P 893petabytes (1024 terabytes) 894.El 895.It Ic -sparse 896True if the current file is sparse, 897i.e. has fewer blocks allocated than expected based on its size in bytes. 898This might also match files that have been compressed by the filesystem. 899.It Ic -type Ar t 900True if the file is of the specified type. 901Possible file types are as follows: 902.Pp 903.Bl -tag -width indent -compact 904.It Cm b 905block special 906.It Cm c 907character special 908.It Cm d 909directory 910.It Cm f 911regular file 912.It Cm l 913symbolic link 914.It Cm p 915FIFO 916.It Cm s 917socket 918.El 919.It Ic -uid Ar uname 920The same thing as 921.Ar -user Ar uname 922for compatibility with GNU find. 923GNU find imposes a restriction that 924.Ar uname 925is numeric, while 926.Nm 927does not. 928.It Ic -user Ar uname 929True if the file belongs to the user 930.Ar uname . 931If 932.Ar uname 933is numeric and there is no such user name, then 934.Ar uname 935is treated as a user ID. 936.It Ic -wholename Ar pattern 937The same thing as 938.Ic -path , 939for GNU find compatibility. 940.It Ic -writable 941Matches files which are writable by the current user. 942This test makes use of the 943.Xr access 2 944system call, and so can be fooled by NFS servers which do UID mapping (or root-squashing). 945This is a GNU find extension. 946.El 947.Sh OPERATORS 948The primaries may be combined using the following operators. 949The operators are listed in order of decreasing precedence. 950.Pp 951.Bl -tag -width indent -compact 952.It Cm \&( Ar expression Cm \&) 953This evaluates to true if the parenthesized expression evaluates to 954true. 955.Pp 956.It Cm \&! Ar expression 957.It Cm -not Ar expression 958This is the unary 959.Tn NOT 960operator. 961It evaluates to true if the expression is false. 962.Pp 963.It Cm -false 964Always false. 965.It Cm -true 966Always true. 967.Pp 968.It Ar expression Cm -and Ar expression 969.It Ar expression expression 970The 971.Cm -and 972operator is the logical 973.Tn AND 974operator. 975As it is implied by the juxtaposition of two expressions it does not 976have to be specified. 977The expression evaluates to true if both expressions are true. 978The second expression is not evaluated if the first expression is false. 979.Pp 980.It Ar expression Cm -or Ar expression 981The 982.Cm -or 983operator is the logical 984.Tn OR 985operator. 986The expression evaluates to true if either the first or the second expression 987is true. 988The second expression is not evaluated if the first expression is true. 989.El 990.Pp 991All operands and primaries must be separate arguments to 992.Nm . 993Primaries which themselves take arguments expect each argument 994to be a separate argument to 995.Nm . 996.Sh ENVIRONMENT 997The 998.Ev LANG , LC_ALL , LC_COLLATE , LC_CTYPE , LC_MESSAGES 999and 1000.Ev LC_TIME 1001environment variables affect the execution of the 1002.Nm 1003utility as described in 1004.Xr environ 7 . 1005.Sh EXAMPLES 1006The following examples are shown as given to the shell: 1007.Bl -tag -width indent 1008.It Li "find / \e! -name \*q*.c\*q -print" 1009Print out a list of all the files whose names do not end in 1010.Pa .c . 1011.It Li "find / -newer ttt -user wnj -print" 1012Print out a list of all the files owned by user 1013.Dq wnj 1014that are newer 1015than the file 1016.Pa ttt . 1017.It Li "find / \e! \e( -newer ttt -user wnj \e) -print" 1018Print out a list of all the files which are not both newer than 1019.Pa ttt 1020and owned by 1021.Dq wnj . 1022.It Li "find / \e( -newer ttt -or -user wnj \e) -print" 1023Print out a list of all the files that are either owned by 1024.Dq wnj 1025or that are newer than 1026.Pa ttt . 1027.It Li "find / -newerct '1 minute ago' -print" 1028Print out a list of all the files whose inode change time is more 1029recent than the current time minus one minute. 1030.It Li "find / -type f -exec echo {} \e;" 1031Use the 1032.Xr echo 1 1033command to print out a list of all the files. 1034.It Li "find -L /usr/ports/packages -type l -exec rm -- {} +" 1035Delete all broken symbolic links in 1036.Pa /usr/ports/packages . 1037.It Li "find /usr/src -name CVS -prune -o -depth +6 -print" 1038Find files and directories that are at least seven levels deep 1039in the working directory 1040.Pa /usr/src . 1041.It Li "find /usr/src -name CVS -prune -o -mindepth 7 -print" 1042Is not equivalent to the previous example, since 1043.Ic -prune 1044is not evaluated below level seven. 1045.El 1046.Sh COMPATIBILITY 1047The 1048.Ic -follow 1049primary is deprecated; the 1050.Fl L 1051option should be used instead. 1052See the 1053.Sx STANDARDS 1054section below for details. 1055.Sh SEE ALSO 1056.Xr chflags 1 , 1057.Xr chmod 1 , 1058.Xr locate 1 , 1059.Xr lsvfs 1 , 1060.Xr whereis 1 , 1061.Xr which 1 , 1062.Xr xargs 1 , 1063.Xr stat 2 , 1064.Xr acl 3 , 1065.Xr fts 3 , 1066.Xr getgrent 3 , 1067.Xr getpwent 3 , 1068.Xr strmode 3 , 1069.Xr ascii 7 , 1070.Xr re_format 7 , 1071.Xr symlink 7 1072.Sh STANDARDS 1073The 1074.Nm 1075utility syntax is a superset of the syntax specified by the 1076.St -p1003.1-2001 1077standard. 1078.Pp 1079All the single character options except 1080.Fl H 1081and 1082.Fl L 1083as well as 1084.Ic -amin , -anewer , -cmin , -cnewer , -delete , -empty , -fstype , 1085.Ic -iname , -inum , -iregex , -ls , -maxdepth , -mindepth , -mmin , 1086.Ic -not , -path , -print0 , -regex , -sparse 1087and all of the 1088.Fl B* 1089birthtime related primaries are extensions to 1090.St -p1003.1-2001 . 1091.Pp 1092Historically, the 1093.Fl d , L 1094and 1095.Fl x 1096options were implemented using the primaries 1097.Ic -depth , -follow , 1098and 1099.Ic -xdev . 1100These primaries always evaluated to true. 1101As they were really global variables that took effect before the traversal 1102began, some legal expressions could have unexpected results. 1103An example is the expression 1104.Ic -print Cm -o Ic -depth . 1105As 1106.Ic -print 1107always evaluates to true, the standard order of evaluation 1108implies that 1109.Ic -depth 1110would never be evaluated. 1111This is not the case. 1112.Pp 1113The operator 1114.Cm -or 1115was implemented as 1116.Cm -o , 1117and the operator 1118.Cm -and 1119was implemented as 1120.Cm -a . 1121.Pp 1122Historic implementations of the 1123.Ic -exec 1124and 1125.Ic -ok 1126primaries did not replace the string 1127.Dq Li {} 1128in the utility name or the 1129utility arguments if it had preceding or following non-whitespace characters. 1130This version replaces it no matter where in the utility name or arguments 1131it appears. 1132.Pp 1133The 1134.Fl E 1135option was inspired by the equivalent 1136.Xr grep 1 1137and 1138.Xr sed 1 1139options. 1140.Pp 1141The 1142.Ic -perm 1143primary accepts a leading slash 1144.Pq Dq Li / 1145as an alias for a leading plus 1146.Pq Dq Li + 1147for its argument as an extension of 1148.St -p1003.1-2001 1149to be compatible with GNU find. 1150.Sh HISTORY 1151A simple 1152.Nm 1153command appeared in 1154.At v1 1155and was removed in 1156.At v3 . 1157It was rewritten for 1158.At v5 1159and later be enhanced for the Programmer's Workbench (PWB). 1160These changes were later incorporated in 1161.At v7 . 1162.Sh BUGS 1163The special characters used by 1164.Nm 1165are also special characters to many shell programs. 1166In particular, the characters 1167.Dq Li * , 1168.Dq Li \&[ , 1169.Dq Li \&] , 1170.Dq Li \&? , 1171.Dq Li \&( , 1172.Dq Li \&) , 1173.Dq Li \&! , 1174.Dq Li \e 1175and 1176.Dq Li \&; 1177may have to be escaped from the shell. 1178.Pp 1179As there is no delimiter separating options and file names or file 1180names and the 1181.Ar expression , 1182it is difficult to specify files named 1183.Pa -xdev 1184or 1185.Pa \&! . 1186These problems are handled by the 1187.Fl f 1188option and the 1189.Xr getopt 3 1190.Dq Fl Fl 1191construct. 1192.Pp 1193The 1194.Ic -delete 1195primary does not interact well with other options that cause the file system 1196tree traversal options to be changed. 1197.Pp 1198The 1199.Ic -mindepth 1200and 1201.Ic -maxdepth 1202primaries are actually global options (as documented above). 1203They should 1204probably be replaced by options which look like options. 1205