UNIX学习笔记(四)find命令的使用3
10.使用depth选项
在使用f i n d命令时,可能希望先匹配所有的文件,再在子目录中查找。使用 d e p t h选项就可以使f i n d命令这样做。这样做的一个原因就是,当在使用f i n d命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。
在下面的例子中,f i n d命令从文件系统的根目录开始,查找一个名为 C O N . F I L E的文件。
它将首先匹配所有的文件然后再进入子目录中查找。
$ find / -name "CON.FILE" -depth –print
11.使用mount选项
在当前的文件系统中查找文件(不进入其他文件系统) ,可以使用f i n d命令的m o u n t选项。
在下面的例子中,我们从当前目录开始查找位于本文件系统中文件名以 X C结尾的文件:
$ find . -name "*.XC" -mount –print
12.使用cpio选项
c p i o命令可以用来向磁带设备备份文件或从中恢复文件。可以使用 f i n d命令在整个文件系统中(更多的情况下是在部分文件系统中)查找文件,然后用 c p i o命令将其备份到磁带上。如果希望使用c p i o命令备份/ e t c、/ h o m e和/ a p p s目录中的文件,可以使用下面所给出的命令,不过要记住你是在文件系统的根目录下:
cd /
find etc home apps –depth –print | cpio -ivcdC65536 –o \
/dev/rmt0
(在上面的例子中,第一行末尾的\告诉s h e l l命令还未结束,忽略\后面的回车。 )
在上面的例子中,应当注意到路径中缺少 /。这叫作相对路径。之所以使用相对路径,是因为在从磁带中恢复这些文件的时候,可以选择恢复文件的路径。例如,可以将这些文件先恢复到另外一个目录中,对它们进行某些操作后,再恢复到原始目录中。如果在备份时使用了绝对路径,例如/ e t c,那么在恢复时,就只能恢复到 / e t c目录中去,别无其他选择。在上面的例子中,我告诉f i n d命令首先进入/ e t c目录,然后是/ h o m e和/ a p p s目录,先匹配这些目录下的文件,然后再匹配其子目录中的文件,所有这些结果将通过管道传递给 c p i o命令进行备份。
顺便说一下,在上面的例子中c p i o命令使用了C 6 5 5 3 6选项,我本可以使用B选项,不过这样每块的大小只有 5 1 2字节,而使用了 C 6 5 5 3 6选项后,块的大小变成了 6 4 K字节(6 5 5 3 6 / 1 0 2 4) 。
13.使用exec或ok来执行shell命令
当匹配到一些文件以后,可能希望对其进行某些操作,这时就可以使用 - e x e c选项。一旦f i n d命令匹配到了相应的文件,就可以用 - e x e c选项中的命令对其进行操作(在有些操作系统中只允许- e x e c选项执行诸如l s或ls -l这样的命令) 。大多数用户使用这一选项是为了查找旧文件并删除它们。这里我强烈地建议你在真正执行 r m命令删除文件之前,最好先用 l s命令看一下,确认它们是所要删除的文件。
e x e c选项后面跟随着所要执行的命令,然后是一对儿 { },一个空格和一个\,最后是一个分号。
为了使用e x e c选项,必须要同时使用p r i n t选项。如果验证一下f i n d命令,会发现该命令只输出从当前路径起的相对路径及文件名。
为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在f i n d命令的- e x e c选项中,例如:
-rwxr-xr-x 10 root wheel 1222 Jan 4 1993./sbin/C80
-rwxr-xr-x 10 root wheel 1222 Jan 4 1993./sbin/Normal
-rwxr-xr-x 10 root wheel 1222 Jan 4 1993./sbin/Revvid
上面的例子中,f i n d命令匹配到了当前目录下的所有普通文件,并在 - e x e c选项中使用ls -l命令将它们列出。
为了在/ l o g s目录中查找更改时间在5日以前的文件并删除它们,可以用:
$ find logs -type f -mtime +5 -exec rm {} \;
记住,在s h e l l中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!
当使用诸如m v或r m命令时,可以使用- e x e c选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你。在下面的例子中, f i n d命令在当前目录中查找所有文件名以 . L O G结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。
find . –name “*.LOG” –mtime +5 –ok rm \;
<rm … ./nets.LOG> ? y
{}按y键删除文件,按n键不删除。
任何形式的命令都可以在- e x e c选项中使用。在下面的例子中我们使用g r e p命令。f i n d命令首先匹配所有文件名为“ p a s s w d *”的文件,例如p a s s w d、p a s s w d . o l d、p a s s w d . b a k,然后执行g r e p命令看看在这些文件中是否存在一个r o u n d e r用户。
find /etc –name “passwd*” –exec grep “rounder” {} \;
rounder:JL9TtUqk8kHwc:500:500::/home/apps/nets/rounder:bin/sh