1.Find是什么?
Find是Linux下的文件搜索工具,在Linux下有两个命令可以搜索文件,一个是locate,还有一个是Find,locate命令的机制有点类似于whatis,都是依赖于数据库查找,而这个数据库会由系统的自动任务计划去创建,也可以由管理员手动执行updatedb命令生成数据库,但是它的执行时间比较长,而且相当消耗资源,所以在生产服务器上就不要做好操作了.基于数据库的查找都比较快,但是由于数据库不是实时都在生成,所以查找的精确度不高,比如:前天的我添加的一个文件,但是没有生成数据库,那么我去查找这个文件就会找不到,不过他的查找速度比Find快.
Find命令是基于本地硬盘去实时查找,不需要依赖于数据库,所以查找速度较慢,但是精确度高,查找消耗资源较大
2.Find使用方法
Find [options] [path] [查找条件] [处理动作]
从使用格式上可以看出,find后面的命令都可以省略,查找路径省略,默认为当前目录.查找条件省略,默认为查找路径下的所有文件.处理动作省略,默认为显示在屏幕上,也就是标准输出.
例: Find /var/log 会把/var/log目录下包括子目录下的所有文件列出来
find 在查找当前目录时可以省略路径,但是我们一般不这么做,我们会在find后面加一个".",表示当前目录,而find命令我们经常用来归档:如,find . | cpio,这样表示把当前目录归档.
下面我们来看看find的具体用法,查找路径大家应该都知道吧,那我们从查找条件说起:
1.-name 以文件名称查找:
根据文件的名字查找,需要查找的文件要是有空格,需要用引号引起来,支持使用通配符机制.
例:find /etc/ -name "passwd"
可以从下图中看出,查找的"pass"并未被匹配出来,而"passwd",匹配出来了,所以find命令是精确查找,而通配符也是可以查找到的.注意:查找文件名严格区分大小写,要是不想区分大小写,可以使用find /etc/ -iname "passwd"
2.根据文件名的属主和属组的文件:
-user:根据文件的属主去查找
-group:根据文件的数组去查找
3.根据文件的UID和GID查找
-uid:根据文件的uid查找
-gid:根据文件的gid查找
4.查找没有属主或属组的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
5.组合条件
-a:and,就是条件与啦,比如:"A -a B",就是A和B
-o:or,就是条件或啦,比如:"A -o B",就是A或B
-not,!,就是条件非啦,比如:"-not A"就是非A,也可以表示为 !A
6.根据文件类型查找:
-f:普通文件
-d:目录文件
-c:字符文件
-l:连接文件
-p:管道文件
-s:套接字文件
剩余的几个使用命令都是类似的,就不一一介绍了
7.根据文件大小查找
-size +#M :表示查找超过#M的文件
-size -#M:表示小于#(M-1)的文件,例如:find /etc -size -2M 表示小于1M的文件
-size #M:表示小于或等于#M,并且在一个单位内变化的文件,例如:find /etc -size 2M,表示小于或等于2M,并且大于1M的,find /etc -size 2G,表示小于或等于2G,并且大于1G的.
8.以时间为查找单位
-atime[+|-]#:以天为查找atime,其中加减号可以参考上面的size
-ctime[+|-]#以天为查找ctime,其中加减号可以参考上面的size
-mtime[+|-]#以天为查找mtime,其中加减号可以参考上面的size
-amin[+|-]#以分钟为查找atime,其中加减号可以参考上面的size
-cmin[+|-]#以分钟为查找ctime,其中加减号可以参考上面的size
-mmin[+|-]#以分钟为查找mtime,其中加减号可以参考上面的size
9.根据权限查找
-perm mode:精确匹配
-perm +mode:任何一类用户的任何一类权限匹配既可
-perm -mode:每类用户要匹配的权限都要存在
例如:文件权限是644
perm 600 是匹配不到的
-perm 600 是匹配不到的
+perm 600 是可以匹配到的
3.处理默认动作
1.-print:打印在屏幕上,默认就是这个操作,这里就不详述了
3.exec COMMAND {} \;:对查找到的文件执行指定的命令,{}符表示站位符,他是接收前面输出的结果的,并且他的两便都需要有空格,这是固定格式.注意:find会把找到的文件一次传给exec所执行的命令
再比如:把/tmp下以txt结尾的文件改成以txta结尾的文件
执行命令find /tmp -name "*.txt" -exec mv {} {}a \;有点类似于grep中的后向引用
4.-ok COMMAND {} \;使用方式跟exec一样,但是是交互式的,就是每次执行都会询问用户是否执行
5.xargs,也是执行find传送过来的结果,但是与exec最大的不同是xargs是一批批的执行find的结果,而exec是一次性的接收所有的find命令,格式上也与exec不同,xargs使用的是管道接受,并且不需要占位符和反斜线等
原文:http://lidefu.blog.51cto.com/3429777/1363826