一、功能说明

    find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

二、语法格式

  find (选项) (参数)

  图示:

   find命令学习_第1张图片

                       

三、常用选项  

  -o:或者,一般用在多个参数之间。

  -a:并且,一般用在多个参数之间。

  -user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;

-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;

  -amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算(-1010分钟以内,+1010分钟以前);

-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;

-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算(-1010天以内,+1010天以前);

-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;

-cnewer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;

-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;

-depth:从指定目录下最深层的子目录开始查找;

-empty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;

-exec<执行指令>:假设find指令的回传值为True,就执行该指令(类似于find|xargs);

-false:将find指令的回传值皆设为False

-follow:排除符号连接;

-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;

-ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;

-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;

-inum:查找符合指定的inode编号的文件或目录;

-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;

-links<连接数目>:查找符合指定的硬连接数目的文件或目录;

-iname<范本样式>:指定字符串作为寻找符号连接的范本样式;

-ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;

-maxdepth<目录层级>:设置最大目录层级;

-mindepth<目录层级>:设置最小目录层级;

-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;

-mount:此参数的效果和指定“-xdev”相同;

-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;

-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;

-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;

-nogroup:找出不属于本地主机群组识别码的文件或目录;

-noleaf:不去考虑目录至少需拥有两个硬连接存在;

-nouser:找出不属于本地主机用户识别码的文件或目录;

-ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;

-path<范本样式>:指定字符串作为寻找目录的范本样式;

-perm<权限数值>:查找符合指定的权限数值的文件或目录;

-fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;

-fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;

-fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;

-print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;

-print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;

-printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;

-prune:不寻找字符串作为寻找文件或目录的范本样式;

-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式(正则表达式);

-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;

-size<文件大小>:查找符合指定的文件大小的文件;

-true:将find指令的回传值皆设为True

-type<文件类型>:只寻找符合指定的文件类型的文件;

-uid<用户识别码>:查找符合指定的用户识别码的文件或目录;

-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;

-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;

-xdev:将范围局限在先行的文件系统中;

-xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查

四、参数

       起始目录:查找文件的起始目录,也可以指定绝对路径或相对路径

五、实例

       模糊搜索,忽略大小写
[root@lixin tmp]# find . -name '*.txt'
./1.txt
[root@lixin tmp]# find . -iname '*.txt'
./1.txt
./1.TXT
[root@lixin tmp]#
      
       搜索名字是.txt或者是.rar的文件
[root@lixin tmp]# find . -name "*.txt" -o -name"*.rar"
./1.txt
./2.rar
      
       搜索绝对路径中包含关键字的文件
[root@lixin /]# find /tmp -path "*lixin*"
/tmp/lixin
/tmp/lixin/1.txt
/tmp/lixin/3.rar
/tmp/lixin/5.txt
/tmp/lixin/3.txt
      
       找出/tmp下不是txt结尾的文件
[root@lixin /]# find /tmp ! -name "*.txt" -type f
/tmp/lixin/3.rar
/tmp/lixin/4.rar
/tmp/lixin/5.rar
/tmp/lixin/2.rar
/tmp/lixin/1.rar
/tmp/2.rar
/tmp/2.RAR
/tmp/1.TXT
[root@lixin /]#
      
       找出456修改时间到当前时间修内改过的文件
[root@lixin ~]# find . -newer 456
.
./.lesshst
./1.txt
./3
./2
./12.txt
./1
./ls
./!
./123
./.bash_history
[root@lixin ~]#
      
       两种方法查找以txt结尾的文件,并改名为txt.bak(-exec 和-ok的功能相同)
[root@lixin tmp]# find . -name "*.txt" -exec mv {} .bak \;
[root@lixin tmp]# cd lixin/
[root@lixin lixin]# ls
1.rar      2.rar      3.rar     4.rar      5.rar
1.txt.bak  2.txt.bak  3.txt.bak 4.txt.bak  5.txt.bak
[root@lixin lixin]#
[root@lixin lixin]# find . -name "*.rar" | xargs -i mv {} {}.bak
[root@lixin lixin]# ls
1.rar.bak  2.rar.bak  3.rar.bak 4.rar.bak  5.rar.bak
1.txt.bak  2.txt.bak  3.txt.bak 4.txt.bak  5.txt.bak
[root@lixin lixin]#
      
       找出空文件
[root@lixin new]# find . -empty
./2.txt.bak
./1.txt.bak
./5.rar.bak
      
查找出当前目录下的所有一级子目录
[root@lixin tmp]# find . -maxdepth 1 -type d ! -name "." 
./4
./.ICE-unix
./3
./2
./1
./stu
[root@lixin tmp]#
       //通过-maxdepth参数设定搜索深度为1,排除./..这种特殊目录。
 
       查找/tmp目录下7天以前的文件并且文件后缀是log,并删除
方法一:
[root@lixin tmp]# find /tmp -mtime +7 -name "*.log" -exec rm -rf{} \;
    //通过调用内置的-exec参数直接执行删除操作,或者使用-ok,区别是删除的时候会提示。
方法二:
[root@lixin tmp]# find /tmp -mtime +7 -name "*.log" | xargs rm–rf
    //通过管道符由xargs,转换后交给rm。
方法三:
[root@lixin tmp]# rm –rf `find /tmp -mtime +7 -name "*.log"`
    //反引号的使用,是rm直接删除find的结果。


 

六、扩展学习

     -type的参数有:f表示文件,d表示目录,b表示块设备,c表示字符设备,l表示链接文件,s表示sock文件(安全套接字)。

     -size的参数有:K表示kbM表示MbG表示Gb

    在参数前加!,表示取反。