F i n d命令的一般形式为: find pathname -options [-print -exec -ok] 让我们来看看该命令的参数: pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 -print find命令将匹配的文件输出到标准输出。 -exec find命令对匹配的文件执行该参数所给出的s h e l l命令。相应命令的形式为' c o m m - and' {} \;,注意{ }和\;之间的空格。(e x e c选项后面跟随着所要执行的命令,然后是一对儿{ },一个空格和一个\,最后是一个 分号。) -ok 和- e x e c的作用相同,只不过以一种更为安全的模式来执行该参数所给出的s h e l l命令, 在执行每一个命令之前,都会给出提示,让用户来确定是否执行。 f i n d命令有很多选项或表达式,每一个选项前面跟随一个横杠-。让我们先来看一下该命 令的主要选项,然后再给出一些例子。 -name 按照文件名查找文件。 -perm 按照文件权限来查找文件。 -prune 使用这一选项可以使f i n d命令不在当前指定的目录中查找,如果同时使用了- d e p t h 选项,那么- p r u n e选项将被f i n d命令忽略。 -user 按照文件属主来查找文件。 -group 按照文件所属的组来查找文件。 -mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n 表示文件更改时间距现在n天以前。F i n d命令还有- a t i m e和- c t i m e选项,但它们都和- m t i m e选项 相似,所以我们在这里只介绍- m t i m e选项。 -nogroup 查找无有效所属组的文件,即该文件所属的组在/ e t c / g r o u p s中不存在。 -nouser 查找无有效属主的文件,即该文件的属主在/ e t c / p a s s w d中不存在。 -newer file1 ! file2 查找更改时间比文件f i l e 1新但比文件f i l e 2旧的文件。 -type 查找某一类型的文件,诸如: b - 块设备文件。 d - 目录。 c - 字符设备文件。 p - 管道文件。 l - 符号链接文件。 f - 普通文件。 -size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。 -depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。 -fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件 / e t c / f s t a b中找到,该配置文件中包含了本系统中有关文件系统的信息。 -mount 在查找文件时不跨越文件系统m o u n t点。 -follow 如果f i n d命令遇到符号链接文件,就跟踪至链接所指向的文件。 -cpio 对匹配的文件使用c p i o命令,将这些文件备份到磁带设备中。
几则小技巧 如果想使用f i n d命令的这一选项来查找更改时间在两个小时以内的文件,除非有一个现成 的文件其更改时间恰好在两个小时以前,否则就没有可用来比较更改时间的文件。为了解决 这一问题,可以首先创建一个文件并将其日期和时间戳设置为所需要的时间。这可以用t o u c h 命令来实现。 假设现在的时间是2 3 : 4 0,希望查找更改时间在两个小时以内的文件,可以首先创建这样 一个文件: touch -t 05042140 dstamp 一个符合要求的文件已经被创建;这里我们假设今天是五月四日,而该文件的更改时间 是2 1 : 4 0,比现在刚好早两个小时。 现在我们就可以使用f i n d命令的- n e w e r选项在当前目录下查找所有更改时间在两个小时以 内的文件: find . -newer dstamp -print
为了在/ l o g s目录中查找更改时间在5日以前的文件并删除它们,可以用: find logs -type f -mtime +5 -exec rm {} \;
xargs 在使用f i n d命令的- e x e c选项处理匹配到的文件时, f i n d命令将所有匹配到的文件一起传递 给e x e c执行。不幸的是,有些系统对能够传递给e x e c的命令长度有限制,这样在f i n d命令运行 几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是 x a rg s命令的用处所在,特别是与f i n d命令一起使用。F i n d命令把匹配到的文件传递给x a rg s命 令,而x a rg s命令每次只获取一部分文件而不是全部,不像- e x e c选项那样。这样它可以先处理 最先获取的一部分文件,然后是下一批,并如此继续下去。
将xargs配合find命令使用,如: 在/ a p p s / a u d i t目录下查找所有用户具有读、写和执行权限的文件,并收回相应 的写权限: find /apps/audit -perm -7 -print | xargs chmod o-w 在下面的例子中,我们用g r e p命令在所有的普通文件中搜索d e v i c e这个词: find / -type f -print | xargs grep "device"

|