find - 递归地在层次目录中处理文件

FIND(1)                                                                FIND(1)


NAME

      find - 递归地在层次目录中处理文件


总览 SYNOPSIS

      find [path...] [expression]


描述 DESCRIPTION

      这个文档是GNU版本 find 命令的使用手册。 find 搜索目录树上的每一个文件名

      ,它从左至右运算给定的表达式,按照优先规则(见运算符OPERATORS一节)进行匹

      配,直到得出结果(左边运算在 ’与’ 操作中得出假,在’或’ 操作中得出真),

      然后 find 移向下一个文件名。


      第一个以 ’-’ , ’(’ , ’)’ , ’,’ 或 ’!’ 这些字符起始的参数是表达式的开始;

      在 它之前的任何参数是要搜索的路径,在它之后的任何参数都是表达式的余下部

      分。如果没有路径参数,缺省用当前目录。如果没有表达式,缺 省 表 达 式 用

      ’-print’.


      当所有文件都成功处理时 find 退出并返回状态值0。如果发生错误则返回一个大

      于0的值。


表达式 EXPRESSIONS

      表达式是由选项(选项总是影响所有的操作, 而不仅仅是一个指定的文件的处 理,

      而 且 总 是 返 回真值),测试(测试返回一个真值或一个假值),还有动作(动作

      有side effects, 返回一个真值或假值) 组成。它们都以运算符分开.忽略运算符

      的 时候,默认使用 -and 连接. 如果表达式没有包含 -prune 以外的动作,当表

      达式为真时会执行 -print 动作。


  选项 OPTIONS

      所有的选项都总是返回真值,它们总会被执行,除非放在表达式中执行不到的 地

      方。因此,清楚起见,最好把它们放在表达式的开头部分。


      -daystart

             从 当日起始时开始而不是从24小时之前,计算时间(for -amin, -atime,

             -cmin, -ctime, -mmin, and -mtime)。


      -depth 先处理目录的内容再处理目录本身。


      -follow

             不检索符号链接。隐含了 -noleaf。


      -help, --help

             列出 find 的命令行用法的概要,然后退出。


      -maxdepth levels

             进入命令行参数指定的目录下层目录时,最深不超过levels(一个非负 整

             数) 层。‘-maxdepth 0’ 意味着只在命令行参数指定的目录中执行测试和

             动作。

-mindepth levels

             不在levels(一个非负整数)层之内执行任何测试和动作。‘-mindepth  1’

             意味着处理所有的文件,除了命令行参数指定的目录中的文件。


      -mount  不进入处于其它文件系统之上的目录。可以用-xdev代替,从而和一些其

             他版本的 find 兼容。


      -noleaf

             不为“目录中子目录数量比硬连接数少2”这种假设做优化。这个选项在 搜

             索 那 些 不 遵 循UNIX 文 件 系 统 链 接 约 定 的文件系统时用,比

             如CD-ROM,MS-DOS文件系统或AFS卷的加载点。在普通的UNIX文件系统 中,

             每个目录至少有两个硬连接,它的名字和它的 ’.’ 条目。另外,它的子目

             录(假如有)还会各有一个 ’..’ 链接到它。在 find 检索一个目录时,发

             现 子目录数比它的连接数少二时,它就知道目录中的其他条目并非目录(

             而是目录树中的叶(‘leaf’)节点)。除非需要检索的是这个叶节点,否 则

             没必要去处理它。这样可以带来很大的搜索速度提升。


      -version, --version

             打印find的版本号然后退出。


      -xdev  不进入处于其他文件系统之上的目录。


  测试 TESTS

      数字参数可以这样给出:


      +n     是比 n 大,


      -n     是比 n 小,


      n      正好是 n 。


      -amin n

             对文件的最近一次访问是在 n 分钟之前。


      -anewer file

             对 文 件的最近一次访问比 file 修改时间要晚。如果命令行中 -follow

             在 -anewer 之前,(也只有在这种情况下) -anewer 会受 -follow 的 影

             响。


      -atime n

             对文件的最近一次访问是在 n*24 小时之前。


      -cmin n

             对文件状态的最近一次修改是在 n 分钟之前。


      -cnewer file

             对文件状态的最近一次修改比 file 修改时间要晚。如果命令行中 -fol-

             low 在 -cnewer 之前,(也只有在这种情况下) -cnewer 会 受  -follow

             的影响。

-ctime n

             对文件状态的最近一次修改是在 n*24 小时之前。


      -empty 文件是空的普通文件或者空目录。


      -false 总是false。


      -fstype type

             文 件 处于 type 类型的文件系统之上。有效的文件系统类型在不同版本

             的Unix中是不同的;一些Unix中的不完全的文件系统类型列 表 是 这 样

             :ufs,  4.2, 4.3, nfs, tmp, mfs, S51K, S52K. 你可以用 -printf 加

             上 %F 指令来查看你的文件系统的类型。


      -gid n 文件的数字形式的组ID是 n。


      -group gname

             文件属于 gname (也允许使用数字形式的组ID).


      -ilname pattern

             和 -lname 类似,但是匹配时是不区分大小写的。


      -iname pattern

             和 -name 类似,但是匹配时是不区分大小写的。例如,‘fo*’ and ‘F??’

             模式与文件名 ‘Foo’, ‘FOO’, ‘foo’, ‘fOo’ 等等相匹配。


      -inum n

             文件的 i 结点数是 n。


      -ipath pattern

             和 -path 类似,但是匹配时是不区分大小写的。


      -iregex pattern

             和 -regex 类似, 但是匹配时是不区分大小写的。


      -links n

             文件有 n 个链接。


      -lname pattern

             文 件是一个与pattern 匹配的符号链接。元字符不会对‘/’ 或 ‘.’ 做特

             殊处理。


      -mmin n

             对文件数据的最近一次修改是在 n 分钟之前。


      -mtime n

             对文件数据的最近一次修改是在 n*24 小时之前。


      -name pattern

             基本的文件名(将路径去掉了前面的目录)与shell模式pattern相匹配。元

字 符(‘*’, ‘?’, 还有‘[]’ ) 不会匹配文件名开头的‘.’ 。使用 -prune

             来略过一个目录及其中的文件。查看 -path 的描述中的范例。


      -newer file

             对文件的最近一次修改比 file 修改时间要晚。如果命令行 中  -follow

             在  -newer 之前,(也只有在这种情况下) -newer 会受 -follow 的影响

             。


      -nouser

             没有符合文件的数字形式的用户ID的用户。


      -nogroup

             没有符合文件的数字形式的组ID的组。


      -path pattern

             文件名与shell模式pattern相匹配。元字符不会对‘/’ 或 ‘.’ 做特殊 处

             理。因此,例如:

                       find . -path ’./sr*sc’

             如果存在 ’./src/misc’ 的话,会将它打印出来。想要忽略一个完整的目

             录树,应当使用-prune 而不是检查目录树中所有的文件。例如:要跳 过

             ’src/emacs’ 目录和其中所有的文件和子目录,把其他找到的文件打印出

             来,应当这样:

                       find . -path ’./src/emacs’ -prune -o -print


      -perm mode

             文件的权限位恰好是 mode (八进制或符号)。 Symbolic modes use mode

             0 as a point of departure.


      -perm -mode

             所有的权限位 mode 都被设置了的文件。


      -perm +mode

             任何权限位 mode 被设置了的文件。


      -regex pattern

             文 件名与正则表达式 pattern 匹配。这是对整个路径的匹配,不是搜索

             文件。例如,要匹配名为‘./fubar3’ 的文件,可以使用 正 则 表 达 式

             ‘.*bar.’ 或者 ‘.*b.*3’,但是不能用‘b.*r3’。


      -size n[bckw]

             文 件使用了 n 单位个存储单元。默认的单位是512字节的块,也可以用n

             后面加上 ‘b’ 来指定这个值。其他的单位是字节,如果在 n 后面 加 上

             ‘c’ ;千字节(kB),如果在 n 后面加上‘k’ ;两字节的字,如果在 n 后

             面加上 ‘w’ 。大小不会计入 indirect blocks,但是会计入没有真正 分

             配空间的疏松文件中的块。


      -true  总是true。


      -type c

             文件是 c 类型的。类型可取值如下:


             b      特殊块文件(缓冲的)


             c      特殊字符文件(不缓冲)


             d      目录


             p      命名管道 (FIFO)


             f      普通文件


             l      符号链接


             s      套接字


             D      门 (Solaris 特有)


      -uid n 文件的数字形式的用户ID是 n 。


      -used n

             文件最后一次存取是在最后一次修改它的状态的 n 天之后。


      -user uname

             文件的所有者是 uname (也可以使用数字形式的用户ID).


      -xtype c

             和  -type 相同,除非文件是一个符号链接。对于符号链接:如果没有给

             出 -follow ,如果文件是一个指向 c 类型文件的链接,那么返回true;

             如 果给出了 -follow ,如果 c 是 ‘l’ 那么返回true。换句话说,对于

             符号链接,-xtype 检查那些 -type 不检查的文件。


  动作 ACTIONS

      -exec command ;

             执行 command;如果命令返回状态值0,那么 exec 返回true。所有 find

             其 余的命令行参数将作为提供给命令的参数,直到遇到一个由 ‘;’ 组成

             的参数为止。命令的参数中,字符串 ‘{}’ 将以正在处理的文件名替换。

             所 有 的  ‘{}’  都会被替换,不仅是在单独的一个参数中。有些版本的

             find 不是这样做的。这些参数可能需要用 ‘\’ 来escape 或者用括号 括

             住,防止它们被shell展开。命令是从起始目录执行的。


      -fls file

             返回true;类似 -ls 但是像 -fprint 那样写入 file。


-fprint file

             返回true;将文件全名打印到文件 file 中。如果运行 find 时 file 不

             存在,那么它将被创建。如果它存在,它将被覆盖。文件 名‘‘/dev/std-

             out’’ 和‘‘/dev/stderr’’ 会作特殊处理;它们分别指的是标准输出和标

             准错误输出。


      -fprint0 file

             返回true;类似 -print0 但是像 -fprint 那样写入 file。


      -fprintf file format

             返回true;类似 -printf 但是像 -fprint 那样写入 file。


      -ok command ;

             类似 -exec 但是会先向用户询问 (在标准输入); 如果回应不是 以  ‘y’

             或 ‘Y’ 起始则不会运行 command 而是返回false。


      -print 返回true;在标准输出打印文件全名,然后是一个换行符。


      -print0

             返回true;在标准输出打印文件全名,然后是一个null字符。这样可以使

             得处理 find 的输出的程序可以正确地理解带有换行符的文件名。


      -printf format

             返回true;在标准输出打印 format , 解释 ‘\’ escape 还有 ‘%’ 指 令

             。 字段宽度和精度可以像C函数 ‘printf’ 那样来指定。与 -print 不同

             的是, -printf 在字符串末端不会添加一个新行。可用的escape 和指 令

             如下:


             \a     警告铃声


             \b     回退


             \c     立即停止以当前格式输出,刷新输出设备。


             \f     表格结束


             \n     新行


             \r     回车


             \t     水平tab


             \v     竖直tab


             \\     输出自身‘\’


             \NNN   ASCII编码是NNN(八进制)的字符


             在 一个 ‘\’ 字符后面使用任何其他字符会被作为普通的字符,因此它们

             都会被打印出来。


             %%     输出自身‘%’


             %a     文件最后一次存取的时间。格式是C函数 ‘ctime’ 返回值的格 式

                    。


             %Ak    文件最后一次存取的时间。格式以 k 指定,可以是 ‘@’ 或者是C

                    函数 ‘strftime’ 的指令格式。下面列出了 k 可用的值;有一些

                    并 不是在所有系统上都可用,因为不同系统中 ‘strftime’ 也不

                    同。


                     @      从 Jan. 1, 1970, 00:00 GMT 起的秒数


                    时间字段:


                     H      小时 (00..23)


                     I      小时 (01..12)


                     k      小时 ( 0..23)


                     l      小时 ( 1..12)


                     M      分钟 (00..59)


                     p      本地的 AM 或者 PM


                     r      12小时格式的时间 (hh:mm:ss [AP]M)


                     S      秒 (00..61)


                     T      24小时格式的时间 (hh:mm:ss)


                     X      本地的时间表示方法 (H:M:S)


                     Z      时区(例如,EDT),如果不能决定时区就是空


                    日期字段:


                     a      本地一星期中每天的名称的缩写(Sun..Sat)


                     A      本地一星期中每天的全名,可变长度  (Sunday..Satur-

                            day)


                     b      本地每月的名称的缩写 (Jan..Dec)


                     B      本地每月的全名,可变长度 (January..December)


                     c       本 地 的 日期和时间表示 (Sat Nov 04 12:02:33 EST

                            1989)


                     d      一个月当中的日子 (01..31)


                     D      日期 (mm/dd/yy)


                     h      与 b 相同


                     j      一年当中的日子 (001..366)


                     m      月份 (01..12)


                     U      以星期日作为每周起始,一年当中的星期 (00..53)


                     w      一星期当中的日子 (0..6)


                     W      以星期一当作每周起始,一年当中的星期 (00..53)


                     x      本地的日期表示 (mm/dd/yy)


                     y      年份的最后两位 (00..99)


                     Y      年份 (1970...)



             %b     文件大小,以512字节的块为单位 (四舍五入)。


             %c     文件状态最后一次修改的时间。格式是C函数 ‘ctime’ 返回值 的

                    格式。


             %Ck    文件状态最后一次修改的时间。格式以 k 指定,类似于%A。


             %d     文件在目录树中的深度;0 意味着文件是一个命令行参数。


             %f     去掉了前面的目录的文件名 (只剩下最后的成分)。


             %F     文件所在文件系统的类型;这个值可以为 -fstype 所用。


             %g     文件的组名,如果组没有名称就是数字形式的组ID。


             %G     文件的数字形式的组ID。


             %h     文件名的前面的目录部分 (仅除去最后的成分)。


             %H     据以找到了文件的命令行参数。


             %i     文件的 i 结点号(16进制)。


             %k     文件大小,以1kB 的块为单位 (四舍五入)。


             %l      符号链接的目标 (如果文件不是一个符号链接,那么结果是空字

                    符串)。


             %m     文件的权限位 (8进制)。


             %n     文件的硬连接数。


             %p     文件名。


             %P     文件名,去掉了据以找到了文件的命令行参数的名称部分。


             %s     文件大小,以字节为单位。


             %t     文件最后一次修改的时间。格式是C函数 ‘ctime’ 返回值的格 式

                    。


             %Tk    文件最后一次修改的时间。格式以 k 指定,类似于%A。


             %u     文件的用户名,如果用户没有名称就是数字形式的用户ID。


             %U     文件的数字形式的用户ID。


             在 一个 ‘%’ 字符后面使用任何其他字符,‘%’ 将被忽略 (但是其他字符

             会被打印出来)。


      -prune 如果没有给出 -depth 则返回 true; 不进入当前目录。

             如果给出了 -depth 则返回false; 没有效果。


      -ls    返回true;以 ‘ls -dils’ 格式在标准输出列出文件。块以1kB 字节为单

             位 计数,除非设置了环境变量POSIXLY_CORRECT,那样的话会使用 512字

             节的块。



  运算符 OPERATORS

      以优先级高低顺序排列:


      ( expr )

             强制为优先


      ! expr 如果 expr 是false则返回true


      -not expr

             与 ! expr 相同


      expr1 expr2

             与 (隐含的默认运算符);如果 expr1 为false则不会执行 expr2


      expr1 -a expr2

             与 expr1 expr2 相同


      expr1 -and expr2

             与 expr1 expr2 相同


      expr1 -o expr2

             或;如果 expr1 为true 则不会执行 expr2


      expr1 -or expr2

             与 expr1 -o expr2 相同


      expr1 , expr2

             列表;expr1 和 expr2 都会被执行。expr1 的值被忽略,列表 的 值 是

             expr2的值


参见 SEE ALSO

      locate(1L),  locatedb(5L),  updatedb(1L), xargs(1L) Finding Files (Info

      在线帮助, 或者是打印的版本)


[中文版维护人]

      袁乙钧 <[email protected]>


[中文版最新更新]

      11/01/2003


《中国linux论坛man手册页翻译计划》:

      http://cmpp.linuxforum.net


你可能感兴趣的:(find,find,-,递归地在层次目录中处理文件)