红联Linux门户
Linux帮助

Linux中find命令使用

发布时间:2014-08-16 15:07:15来源:linux网站作者:zmxiangde

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选项还是用的比较多的,再次提示注意{}和\;之间的空格。