用于在文件树中查找文件,并作出相应的处理

 

命令格式:

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

 

命令参数:

        pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。

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

        -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形为'command' {  } \;,注意{   }和\;之间的空格。

        -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

 

命令选项:

         -name 按照文件名查找文件

         -perm 按文件权限查找文件

         -user 按文件属主查找文件

         -group  按照文件所属的组来查找文件。

         -type  查找某一类型的文件,诸如:

                   b - 块设备文件

                   d - 目录

                   c - 字符设备文件

                   l - 符号链接文件

                   p - 管道文件

                   f - 普通文件

         -size n :[c] 查找文件长度为n块文件,带有c时表文件字节大小

         -amin n   查找系统中最后N分钟访问的文件

         -atime n  查找系统中最后n*24小时访问的文件

         -cmin n   查找系统中最后N分钟被改变文件状态的文件

         -ctime n  查找系统中最后n*24小时被改变文件状态的文件

         -mmin n   查找系统中最后N分钟被改变文件数据的文件

         -mtime n  查找系统中最后n*24小时被改变文件数据的文件

         (用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。 )

         -maxdepth n 最大查找目录深度

         -prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略

         -newer 如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项。

 

实例:

(1)查找48小时内修改过的文件

find -atime -2

 

(2)在当前目录查找 以.log结尾的文件。 ". "代表当前目录

find ./ -name '*.log'

 

(3)查找/opt目录下 权限为 777的文件

find /opt -perm 777

 

(4)查找大于1K的文件     

find -size +1000c

 

 find -size 1000c  查找等于1000字符的文件

-exec   参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。{}   花括号代表前面find查找出来的文件名。

(5)在当前目录中查找更改时间在10日以前的文件并删除它们(无提醒)

find . -type f -mtime +10 -exec rm -f {} \;

 

(6)当前目录中查找所有文件名以.log结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。 按y键删除文件,按n键不删除

find . -name '*.log' mtime +5 -ok -exec rm {} \;

 

(7)当前目录下查找文件名以passwd开头,内容包含"pkg"字符的文件  

find . -f -name 'passwd*' -exec grep "pkg" {} \;

 

(8)用exec选项执行cp命令 

find . -name '*.log' -exec cp {} test3 \;

 -xargs find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

实例:

(9)查找当前目录下每个普通文件,然后使用xargs来判断文件类型

 

find . -type f -print | xargs file

 

(10)查找当前目录下所有以js结尾的并且其中包含'editor'字符的普通文件

find . -type f -name "*.js" -exec grep -lF 'ueditor' {} \;
find -type f -name '*.js' | xargs grep -lF 'editor'

 

(11)利用xargs执行mv命令  

find . -name "*.log" | xargs -i mv {} test4

 

(12)用grep命令在当前目录下的所有普通文件中搜索hostnames这个词,并标出所在行

find . -name \*(转义) -type f -print | xargs grep -n 'hostnames'

 

(13)查找当前目录中以一个小写字母开头,最后是4到9加上.log结束的文件

find . -name '[a-z]*[4-9].log' -print

 

(14)在test目录查找不在test4子目录查找  

find test -path 'test/test4' -prune -o -print

 

(15)实例1:查找更改时间比文件log2012.log新但比文件log2017.log旧的文件 

find -newer log2012.log ! -newer log2017.log

 

使用depth选项:

         depth选项可以使find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。 

         实例:find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。 它将首先匹配所有的文件然后再进入子目录中查找

find / -name "CON.FILE" -depth -print

linux学习-find命令_find命令