Linux下find命令详解

时间:2021-10-18 09:17:25

【概述】

  find命令是Linux中一个很强大的查找命令,用于在目录结构中搜索文件并执行指定操作。只要具有相应的权限,即使系统中含有网络文件系统(NFS),find 命令在该文件系统中同样有效。由于find命令功能强大,常被用来在大文件系统中查找文件,这会话费很长时间,所以人们更倾向于把它放在后台执行。接下来我们看看find命令的具体用法。


【1】命令格式

  find pathname -options[-print -exec -ok ...]

  find 查找路径 -命令参数


【2】命令功能

  find命令用于在文件树中查找文件,并做出相应的处理,这个过程中有可能会访问磁盘


【3】命令参数

  pathname:find命令所查找的目录路径

         例如用.来表示当前目录,用/来表示系统根目录

  -print:find命令将匹配的文件输出到标准输出

  -exec:find命令对匹配的文件执行该参数所给出的shell命令

       相应命令的形式为'command' { } \;(注意{ }和\之间有空格

  -ok:和-exec的作用相同,只不过以一种更安全的模式来执行该参数所给出的shell命令

     在执行每一个命令之前,都会给出提示,让用户来确定是否执行


【4】命令选项

1.根据时间查找文件  -atime/-ctime/-mtime/-newer/-anewer/-used

   -atime  -n +n          按文件访问时间来查找文件,-n指n天以内,+n指n 天以前

   -ctime  -n +n          按文件创建时间来查找文件,-n指n天以内,+n指n 天以前  

   -mtime  -n +n         按文件更改时间来查找文件,-n指n天以内,+n指n 天以前 

   -newer file1 ! file2    查找更改时间比文件file1新但比文 件file2旧的文件

eg.

    -amin  -10     // 查找在系统中最后10分钟访问的文件

    -amin  +30     // 查找最近30分钟前被存取过的文件

    -atime   -2     // 查找在系统中最后48小时访问的文件

    -atime  -1     // 查找1天之内被存取过的文件

    -mmin   +60      // 查找60分钟前改动过的文件      

    -mmin  -5     // 查找在系统中最后5分钟里修改过的文件

    -mtime  -2      // 查找最近两天内改动过的文件

    -mtime  -1     // 查找在系统中最后24小时里修改过的文件

    -newer   tmp.txt      // 查找更新时间比tmp.txt近的文件或目录
    -anewer   tmp.txt      // 查找存取时间比tmp.txt近的文件或目录

    -used  -2     //列出文件或目录被改动过之后,在2日内被存取过的文件或目录

 由此可以看出,min是分钟,time是小时,a访问,c改变状态,m改变数据


2.根据文件名查找文件   -name

     -name   filename       查找名为filename的文件

eg.

    -name   "*.txt"     // 查找.txt文件并显示

    -name   "[A-Z]*"     // 查找以大写字母开头的文件

    -name   "host*"     // 查找以host开头的文件

    -name   "[a-z][a-z][0�C9][0�C9].txt"     // 查找以两个小写字母和两个数字开头的txt文件

    -name april*     // 查找以april开始的文件

    -name   april*   fprint file     // 查找以april开始的文件,并把结果输出到file中

    -name ap* -o -name may*     // 查找以ap或may开头的文件

    -name tom.txt   -ftype vfat     // 查找名称为tom.txt且文件系统类型vfat的文件

    -name t.txt ! -ftype vfat     // 查找名称为tom.txt且文件系统类型不为vfat的文件

    -name wa* -type l     // 查找名为wa开头且类型为符号链接的文件


3.根据文件权限查找文件    -perm

    -perm     按执行权限来查找

eg.

    -perm  700     // 查找权限为700的文件或目录

    -perm  777     // 查找所有用户都可读写执行的文件


4.根据文件属主查找文件    -user/nouser

    -user  username     按文件属主来查找

eg.

    find    /   -user    fred     // 查找在系统中属于FRED这个用户的文件

    find   /home   -user  cnscn     // 列出/home目录内属于用户cnscn的文件或目录

    find   /home   -nouser     // 列出/home内不属于本地用户的文件或目录


5.根据文件所属组查找文件    -group/-nogroup

    -group groupname     按文件所属组来查找

eg.

    find    /   -group   cat     //  查找在系统中属于 groupcat的文件

    find   /home   -group   cnscn     // 列出/home内组为cnscn的文件或目录

    find   /home   -nogroup     // 列出/home内不属于本地组的文件或目录


6.根据文件类型查找文件   -tpye

    -type    b /d /c /p /l /f /s      查找是块设备、目录、字符设备、管道、符号链接、普通、socket文件

eg.

   -type  d     // 查找当前目录下的目录

   -type  c     // 查找当前目录下的字符设备文件

   -type  l     // 查找当前目录下的符号链接文件


7.根据文件大小查找文件   -size

    -size  n[c]     查找长度为n块[或n字节]的文件

eg.

    -size   +1000000ct     // 查找长度大于1Mb的文件

    -size   100ct     // 查找长度为100c的文件

    -size   +10     // 查找长度超过期作废10块的文件(1块=512字节)

    -size   +512k     // 查找大于512k的文件

    -size   -512k     // 查找小于512k的文件


    当然了,find命令也可以和其他的命令一起复合使用,例如:

        a.查当前目录下的所有普通文件

        # find . -type f -exec ls -l {} \; 


        b.在/ l o g s目录中查找更改时间在5日以前的文件并删除

        $ find logs -type f -mtime +5 -exec   -ok   rm {} \;


        c.查询当天修改过的文件

        [root@book class]# find   ./   -mtime   -1   -type f   -exec   ls -l   {} \;


        d.查询文件并询问是否要显示

        [root@book class]# find   ./   -mtime   -1   -type f   -ok   ls -l   {} \;  
        < ls … ./classDB.inc.php > ? y
        -rw-r�Cr�C    1 cnscn    cnscn       13709   1月 12 12:22 ./classDB.inc.php
        [root@book class]# find   ./   -mtime   -1   -type f   -ok   ls -l   {} \;  
        < ls … ./classDB.inc.php > ? n
        [root@book class]#


        e.比如要查找磁盘中大于3M的文件:

        find . -size +3000k -exec ls -ld {} ;


        f.将find出来的东西拷到另一个地方

         find *.c -exec cp ‘{}’ /tmp ‘;’


        g.查找2004-11-30 16:36:37时更改过的文件

         # A=`find ./ -name "*php"` |   ls -l �Cfull-time $A 2>/dev/null | grep "2004-11-30 16:36:37"

本文出自 “CLOWN” 博客,请务必保留此出处http://clown5.blog.51cto.com/10730975/1775882