Find命令的一般形式为:
find pathname -options [-print -exec -ok]
参数说明如下:
pathname:find命令所查找的目录路径。
-print:find命令将匹配的文件输出到标准输出。
-exec:find命令对匹配的文件执行该参数所给出的shell命令,在这之后的命令的形式为'coomand' {} \;,这里要注意{}+空格+\;
-ok:和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
一,name选项
该选项用于根据文件名来查找。
在查找过程中需要用引号将文件名模式引起来,也就是说在文件名的部分是可以用模式串来匹配的,如
在当前目录下,查找文件名以一个大写字母开头的文件,可以用如下命令查找:
find ./ -name "[A-Z]*" -print
二,perm选项
该选项按照文件权限模式来查找文件,使用-perm选项。
如在当前目录下查找文件权限为644的文件,可以用:
find ./ -perm 644 -print
三,nouser和user选项
这两个选项用于按照文件属主查找文件,在命令中可以给出相应的用户名。例如在当前目录下查找属于xinyu的文件。
find ./ -user xinyu -print
为了查找那些账户已经被删除的用户的文件,可以用-nouser选项,这个选项不用用户名参数,如
find ./ -nouser -print
与这两个选项相对应的另外两个用于组属主查找的选项是:group和nogroup,其用法和user,nouser一样。
四,mtime选项
这个选项是按照文件的更改时间来查找文件,在我们做一些数据备份的时候,可能经常要删除几天以前的备份,只留下最近几天的备份,这时这个选项就有用了,或者说我们想删除好些个月以前的文件。这个选项可以用于查找N天以前的文件,或者是N天以内的文件,用+号和-号,这两个符号来限定,不用说就知道-号表示多少天以内,+号表示多少天以前了。
find ./ -mtime -6 -print 6天以内的文件
find ./ -mtime +6 print 6天以前的文件
五,newer选项
有时我们并不想指定确定的多少天以前或者多少天以内,我们想查找哪些文件比某个指定的文件更新,或者哪些文件比某个指定的文件更旧。比如我们想查找比"mod_hash.c"更新的文件。
find ./ -newer mod_hash.c -print
可以用 ! -newer表示不比某个文件更新。
六,type选项
在Linux系统中有很多中不同的文件类型,如:
d:表示 目录。
c:表示字符设备文件。
b:表示块设备文件。
p:表示管道文件。
l:表示符号连接文件。
还有s网络文件等,比如我们想在当前目录下查找所有的符号连接文件,可以用
find ./ -type l -print
想找所有的目录文件
find ./ -type d -print
七,size选项
一看这个选项就知道,这个选项是根据文件的大小来查找文件的。但要注意的是,这个选项可以根据块或者是字节来查找文件,一个块是按512字节来算的,默认是以块为单位的,如果要按字节查找,只要在后面加c就可以,如
find ./ -size +10 -print 当前目录下查找文件长度超过10个块的文件。
fiind ./ -size 1024c -print 当前目录下查找文件的长度为1024字节的文件
八,prune选项
在介绍这个选项之前,先要熟悉另外两个选项的用法-path,-a或者是-o,在不用prune选项时,path选项可以指定在路径下的哪个目录下查找。如:
find ./ -path 'apache' -name *.conf
表示在当前目录下的apache目录里查找后缀为conf的配置文件。
-o表示or的意思,就是会对其左边的命令返回进行求真,如果是匹配,就会进行后面的命令选项运算。如-path ./apache -prune -o -print ,表示如果左边匹配的不是./apache目录,就会调用-print进行输出。-a是表示and的意思,下面区别他们的意思:
find . -path ./apache -prune -o -print 显示除./apache目录之外的所有文件
find . -path ./apache -prune -a -print 只显示当前目录下的./apache目录
该选项用于在查找过程忽略某个目录,这个选项的使用比之前的选项都要讲究一些。这个选项就像一个判断我们的一样,后面接-o表示选择,如果查找的目录是被忽略的,就不会输出。
在使用prune选项的时候,用-path 以指定要忽略的路径,另外要注意以下几个问题:
-path指定路径,如要忽略当前目录下的apache目录:-path ./apache -prune -o -print ,-o可以表示一个选择前面的是否匹配。
用-path时,不能用 ./apache/ ,而是./apache。
九,depth选项
该选项用于控制find的行为,增加这个选项之后,find命令会先匹配所有的文件,然后再进入子目录中查找。
十,mount选项
该选项表示find命令只在当前的文件系统中查找文件,不进入其他文件系统,我们知道在Linux系统中,可以将一个文件系统挂载到当前文件一个目录接点上。
十一,exec和ok选项
这两个选项可以在find命令匹配到一些文件之后,对其匹配的文件进行某些操作,这时可以使用-exec选项,比如我们想用ls -l命令列出所匹配到的文件:
find ./ -type l -exec ls -l {} \;
注意这个exec选项后面的格式,再如我们删除一个星期以前的日志文件。
find ./logs -type f -mtime +7 -exec rm {} \;
ok选项和exec选项的作用是一样,可以认为是exec的安全模式,如果用ok选项,那么在操作之前都会给用户一个提示:是否需要这样做。
在实际应用过程中,exec选项还是用的比较多的,再次提示注意{}和\;之间的空格。