码迷,mamicode.com
首页 > 系统相关 > 详细

Linux学习之路4-强大的find命令

时间:2015-09-04 12:42:27      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:linux find

强大的find命令:

    find [OPTION]... [查找路径] [查找条件] [处理动作]

         查找路径:默认为当前路径;

         查找条件:指定的查找标准,可以根据文件名、大小、属主属组、类型等进行;默认为找出指定路径下的所有文件

        

根据文件名进行查找:

              -name "文件名称": 支持使用glob;

                 *, ?, []

              -iname "文件名称":不区分字符大小写,支持使用glob;

 

              -regex"PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;

 

         根据属主、属组查找:

             -user USERNAME: 查找属主为指定用户的文件;

             -group GROUPNAME:

             -uid UserID: 查找文件的属主指定uid的文件;

             -gid GroupID:

             -nouser: 查找没有属主的文件;

             -nogroup:查找没有属组的文件;

         :find /-nouser -a -nogroup 查找没有属主、属组的文件

 

         根据文件类型进行查找:

             -type TYPE

                 f: 普通文件

                 d: 目录

                 l: 符号链接

                 b: 块设备

                 c: 字符设备

                 p: 命名管道

                 s: 套接字

         :find / -userdx -type f 查找用户名为dx文件类型为普通的文件

 

         组合查找条件:

             与条件:-a

             或条件:-o

             非条件:-not, !

 

             !A -o !B = !(A -a B)

             !A -a !B = !(A -o B)

         :find / -userdx -type f 默认为与条件

         find / -user dx -o -type l查找用户名为dx或文件类型为符号链接的文件

             find / ! -user dx 查找用户名不是dx的文件

 

         根据文件大小进行查找:

             -size [+|-]#unit #为一个整数

                 1. #unit    例如-size3k  要注意!这里含义是一个范围{3-1,3}

                                 2K至3K

                 2. +#unit   例如-size +3k 这个好理解,意思是3K以上

                 3. -#unit   等于{0,#-1} 例如-size -3k 这里又要注意了!又是一个范围了,小于{3-1}K,即小于2K

            根据时间进行查找:

                    这里又分以天(24小时)为单位:

-atime  访问时间

                    -mtime  修改时间

                    -ctime  改变时间

                 这里时间的条件使用也很特别!例如:

             -mtime 4 表示查找5天前4天后被修改的,大于等于4小于5

             -mtime +4 表示5天后被修改的,大于等于5

             -mtime -4 表示4天以内被修改的,小于4

 

                 以分钟为单位:

                 -amin 访问

                 -mmin 修改

                 -cmin  改变

                            

         根据权限:

             -perm [/|-]MODE

             MODE: 精确权限匹配

             /MODE:任何一类对象(u,g,o)的任何一位权限符合条件即可;隐含或条件;

             -MODE:为每一类对象指定的每一位权限都必须同时存在方为符合条件;隐含与条件;每一类用户的权限都包含对其指定的所有权限。即至少有指定的权限!

        

             #find  /tmp  -perm 755   //查找在/tmp目录下权限是755的文件

             #find  /tmp  -perm +222  //表示只要有一类用户(属主,属组,其他)的匹配写权限就行

             #find  /tmp  -perm -222  //表示必须所有类别用户都满足有写权限

 

         处理动作:

         -print: 默认处理动作,默认为输出至屏幕

         -ls:类似于对查找到的每个文件做"ls -l"的操作;

         -delete: 删除查找到的文件;

         -fls /path/to/somefile:查找到的文件的详细路径信息保存至指定文件中;

         -ok COMMAND {} \;对每个文件执行指定的命令之前需要用户事先确认;

         -exec COMMAND {} \;无需用户确认;

 

find 技巧:

 

时间查找技巧

用man说明:-mtime  n       Files data was last modified n*24 hours ago.

所以find -mtime 4 是找到所有在距现在96小时之内被修改过的文件或目录。

嗯,鸟哥说的没错,

find -mtime 4 是找到所有5天前4天后被更改的档案文件,

find -mtime -4 是4天内被改的档案,

find -mtime +4 是4+1天,5天后被改的档案。

 

 find权限的技巧:至少一类用户没有的反义是所有用户都有,再取反就ok了,正面难写时就取反,再在个反就得到了

例如:练习题16(至少有一类用户,所以用-,没有执行权限,反过来理解就是有执行权限111,然后用!取反就得到结果了)

查找/etc目录下至少有一类用户没有执行权限的文件;

     方法一:find /etc  \( ! -perm /001 -o ! -perm /010 -o ! -perm/100 \)

     方法二:find /etc ! -perm -111

 

find –ok 用法,留意这里没有-exec

find /root/ -name"del.txt" -ok -rm {} \;

 

文件大小查找技巧:

 

例如:一个文件5556字节,可以这样写

find /root -size -5557c -size+5555c -exec ls -ld {} \;

(即查找大于5555字节小于5557字节的文件,以上查找的是/root 目录)

 

查找 小于500K,大于50K的文件

find /root -size -500K -size+50K -exec ls -ld {} \;

 

size默认单位是b,而它代表的是512字节,所以2表示1K,1M则是2048,如果不想自己转换,可以使用其他单位,如c、K、M等

find . -empty 查找当前目录大小为0的文件或空目录

 

正则匹配实例与技巧:

find path -regex"xxx"

find path -iregex"xxx"

这两条命令都是运用base-regexp对文件路径进行匹配,iregex忽略大小写。

但是给出的正则表达式必须要匹配完整的文件路径

   比如:find /-regex "find" 这样子是找不到/usr/bin/find的,要像这样find / -regex ".*find"或者更精确一点find/ -regex ".*/find"

如果要使用扩展的正则表达式,对于BSD系的find可以在路径名前加一个"-E"选项

GNU的find支持多种风格的正则表达式,用-regextype 指定所使用的正则表达式类型,可选的有emacs(默认),posix-awk,posix-basic,posix-egrep,posix-extended,喜欢了grep -E,所以我就用posix-egrep了

 

find / -regextype"posix-egrep" -regex ".*/find"

 

-----

find . -exec chown dx:root {}\;改变当前目录下所有文件的权限

find . -cmin -10 查找当前目录下10分钟内被修改过的文件,+10即是10分钟之前


本文出自 “天真小同志” 博客,请务必保留此出处http://dengxi.blog.51cto.com/4804263/1691232

Linux学习之路4-强大的find命令

标签:linux find

原文地址:http://dengxi.blog.51cto.com/4804263/1691232

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!