FIND 使用指南 名称 find - 在目录层次中寻找文件 概要 find [path...] [expression] 路径 表达式 描述 这个文档是GNU版本find命令的使用手册。find搜索目录树上的每一 个文件名,它从左至右鉴定给定的表达式,按照优先规则(见运算符 一节)进行匹配,直到知道结果(运算符左边值为假则进行与操作, 为真则进行或操作),然后find移向下一个文件名。第一个开头带有 '-','(',')',',',或'!'这些字符的参数将是表达式的开始;在它之 前的一些参数是要搜索的路径,在它之后的一些参数是测试类型的表 达式。缺省路径用当前目录,缺省表达式用'-print'. 假如所有文件都能成功进行检索,find将返回一个 状态值0,有错误 发生则返回一个大于0的值。 表达式 这个表达式是由选项(其总是影响所有的操作,而不仅仅是一个指定的 文件,而且总是返回真值),测试(其返回一个真值或一个假值), 和事件()组成,它们都有运算符分开.-and用在运算符忽略的地方. 若表达式没有包含事件,这个表达式为真值,则 -prune, -print这 两个事件将用于搜索所有的文件时缺省使用。 选项 所有的选项都能返回真值,它们总能被执行,除非放在表达式中执行 不到的地方。因此,通常把它们放在表达式的开头部分。 -daystart 从今天也不从24小时之前开始计量时间(对 -amin, -atime, -cmin, -ctime, -mmin, 和-mtime有效)。 -depth 先搜索目录的内容再搜索目录本身。 -follow 不检索符号链接。意即 -noleaf。 -help, --help 列出find的命令行用法的概要,然后返回 -maxdepth levels 在命令行下目录的最大深度级别(非负整数),'-maxdepth 0' 意味着只在命令行参数中应用检测和事件。 -mindepth levels 小于指定数字(非负整数)的深度级别的目录层次将不应用检 测和事件。'-mindepth 1'意味着除了当前的命令行参数外 将搜索所有的文件。 -mount 在其它文件系统中不进入目录。 -noleaf 不优化假如某一个目录里包含少于两个以下的子目录。这个选 项在那些不遵循UNIX文件系统链界约定的文件系统中用,像 CD-ROM,MS-DOS或AFS卷加载点上。在UNIX文件系统中,每个 目录有至少两个硬链接,它的名字和'.'。它的子目录(假如有) 各自有一个'..'链接到它本身。在FIND检索一个目录时,在统 计其子目录少于两个,意味着将不需要在进行下去了。只需要 检索一下这个目录名;这在检索速度上是个有意义的提高。 -version, --version 显示FIND的版本号,终止程序。 -xdev 在其它文件系统中不进入目录。 测试 用下边的格式可以指定数字参数 +n 比n大。 -n 比n小。 n 恰好是n。 -amin n 文件最后一次访问是在n分钟前。 -anewer file 文件最后访问时间比指定的file修改时间更晚。 -anewer会 受到-follow的影响当在命令行中-follow在-anewer之前时。 -atime n 文件最后一次访问是n*24小时前。 -cmin n 文件的状态的改变是在n分钟前。 -cnewer file 文件状态的改变比指定的file状态的改变时间更晚。-cnewer 会受到-follow的影响当命令行中-follow在-cnewer之前时。 -ctime n 文件状态的改变时间是在n*24小时前。 -empty 文件是空的,它是一个正规的文件或目录。 -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(允许数字型的gname). -ilname pattern 同-lname, 但是匹配是大小些不区分的. -iname pattern 同-name,但是匹配是大小些不区分的。举个例子,这个通配符 'fo*'和'f??'匹配文件名'Foo', 'FOO', 'foo', 'fOo',等 等。 -inum n 文件的i结点数是n. -ipath pattern 同 -path, 但是匹配大小写不区分。 -iregex pattern 同 -regex, 但是匹配大小写不区分. -links n 文件有n个链结。 -lname pattern 文件是个符号链结内容匹配shell通配符pattern。元字符 '/'或'.'不能区别对待。 -mmin n 文件的数据最后一次被编辑是在n分钟前. -mtime n 文件的数据最后一次被编辑是在n*24小时前. -name pattern 基本的文件名(起始的目录已经检测过了)匹配shell通配符 pattern.元字符('*', '?', 和'[]')不能匹配一个以'.' 开头的文件名。忽略在它下边的目录或文件,用-prune;参看 -path描述中的例子。 -newer file 文件最后编辑时间比指定的file晚 -newer会受到-follow的影响当在命令行中-follow在-newer 之前时。 -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(八进制或符号).符号模式用 模式0做为开始。 -perm -mode 文件的所有访问权限位mode都设了。 -perm +mode 文件的一些访问权限位mode设了。 -regex pattern 文件匹配规则的表达式通配符。这是一个在整个路径中的 匹配,而不是一个检索。举个例子,匹配一个'./fubar3' 文件名的文件,你应该用规则的表达式'.*bar.'或'.*b.*3', 而不是'b.*r3'. -size n[bckw] 文件占用n个单元空间。在缺省时或n后边跟着字符b时,这个 单元是512字节的块,n后边跟着c是字节,n后边跟着k是千字节, n后边跟着w是两个字节的词.文件大小不能计算间接的块,但是 能计算很少的没能实际分配大小的文件。 -true 总是真 -type c 文件是类型c: b 块(缓冲)设备. c 字符设备. d 目录. p 有名管道(FIFO). f 规则文件. l 符号链结. s 插座. -uid n 文件的数字型用户ID是n. -used n 文件的最后访问时间是在它的状态改变时间的n天前. -user uname 文件是属于名为uname(数字型ID也可)的用户。 -xtype c 这一项是和-type相同的除非文件是一个符号链结。 若是符号链结:假如 -follow 没有给出,若这个文件链结 的是类型为c的文件,则返回真;假如给了-follow选项,若c 为'l',则返回真.对于符号链结, -xtype检测链结的文件类 型,-type不做这样的检测。 事件 -exec command ; 执行命令;返回的状态值为零则为真。所有在这之后的参数 都是command的参数,直到遇到';'.字符串'{}'将被当前的 文件名代替,作为当前命令的参数,并不是象一些版本FIND 一样是个单独存在的一个参数,这些语句应该被转义(用'\') 或被引用,以此来保护他们被SHELL展开。这个命令将在起始 目录被执行。 -fls file 值为真;同 -ls 但像 -fprint一样将输出写向文件file -fprint file 值为真;输出整个文件名到文件file中.当find运行时file不 存在,它将被建立;若存在,原来的文件内容将被删掉。也可以 用名为"/dev/stdout"和"/dev/stderr"的文件,它们分别指 的时是标准输出和标准错误。 -fprint0 file 值为真;同 -printf 但是将像 -fprint 一样将输出写像文 件file. -ok command 同 -exec但是先问用户(在标准输入);假如应答不是以'y'或 'Y'开头,将不执行command,返回假。 -print 值为真;在标准输出上输出整个文件名,并加一个新行。 -print0 值为真;在标准输出上输出整个文件名,并加一个空字符。这 将允许其它程序能正确的处理在FIND输出中包含新行的文件名。 -printf format 值为真。通过解释转义字符'\'和指示字符'%',格式化输出 到标准输出上.空间宽度和精度能像c函数'printf'一样被 指定。不像 -print, -printf不能在字符串的末尾自动加 一个新行。这些转义和指示字符是: \a 鸣声. \b 退格键. \c 马上停止格式输出,输出到标准输出上。 \f 换页符. \n 行符. \r 回车符. \t 水平制表符. \v 竖直制表符. \\ 反斜线. 一个'\'字符后跟着其它字符将被视为普通字符,它们都将 被输出。 %% 符号'%'. %a 在格式输出中通过调用c函数'ctime'返回文件的 最后访问时间。 %AK 用K指定的格式输出文件的最后访问时间。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 本地的上午或下午. 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..Saturday). 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 星期的哪一天 W 当年的星期数,用星期一做为一星期的第一天 (00..53). x 本地的日期表示法 (mm/dd/yy). y 当年的最后两位数 (00..99). Y 年份 (1970...). %b 用512字节的块计算的文件的大小(上舍入)。 %c 用C函数'ctime'返回的文件状态的最后改变时间。 %Ck 被k指定的文件状态的最后改变时间,k与%A后的k相同. %d 文件在目录树中的深度;0意味着文件在命令行参数中. %f 不带目录的文件名(只有最后的元素). %F 这个文件所在的文件系统类型名;这个值能被 -fstype用。 %g 文件的组名,若组无名则是组ID. %G 文件的数字组ID. %h 文件的主目录 (除了最后的元素). %H 命令行参数若文件在命令行参数中找到. %i 文件的i节点数 (10进制格式). %k 用1K字节的块计算文件的大小(上舍入)。 %l 符号链接的目标(假如文件不是一个符号链接则返回一个 空字符串). %m 文件的访问权限位 (八进制) %n 文件的硬链接数 %p 文件名. %P 用在命令行参数之下发现的文件名代替文件名. %s 用字节计算的文件大小. %t 用C函数'ctime'返回的文件的最后编辑时间。 %Tk 被k指定格式的文件的最后编辑时间,k与%A后的k相同. %u 文件的用户名,若没有则输出用户数字ID. %U 文件的数字ID. 字符'%'后跟着另外的字符将被丢弃(但是其它的字符将输出). -prune 假如 -depth 没指定,值为真;不进入当前的目录。 若 -depth 给定,值为假;没作用. -ls 值为真;用 'ls -dils'格式在标准输出中列出当前目录的文件。 块记数单位是1k字节,除非 设定了POSIXLY_CORRECT环境变量, 将用512字节作为单位。 操作符 列出优先级顺序 ( expr ) 强制优先. ! expr 假如expr为假则为真. -not expr 同 ! expr. expr1 expr2 和操作(默认); 假如expr1值是假expr2不能鉴定。 expr1 -a expr2 同 expr1 expr2. expr1 -o expr2 与操作;假如expr1值是真expr2不能鉴定。 expr1 -or expr2 同 expr1 -o expr2. expr1, expr2 序列;expr1,expr2都能被执行,expr1的值舍弃; 序列的值是expr2的值。 参见 locate(1L), locatedb(5L), updatedb(1L), xargs(1L) 找更多的相关文件 (在线 Info 或印刷品). |