Linux下find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了很多的查找条件,功能非常强大。




1.命令格式:


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




2.命令功能:


用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)




3.命令参数:


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


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


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


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




options常用的有如下选项:


     -name: 按照名字查找


     -perm: 按照文件权限来查找文件


     -prune: 不在当前指定的目录下查找。


     -user: 按照文件属主来查找文件


     -group: 按照文件多数的组来查找文件


     -mtime -n +n :按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内, +n表示文件更改时间距现在n天以前。


     -nogroup: 查找无有效所属组的文件,即该文件所属组在etc/group中不存在


     -nouser : 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在


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





下面通过一些简单的例子来介绍find的常规用法


1.按名字查找




1)查找文件名为test.c的文件


[admin@bogon ~]$ find -name test.c


./test.c


[admin@bogon ~]$



Linux下find命令_子目录




2)查找文件名包含 test 的文件


[admin@bogon ~]$ find -name 'test'


./test


./BIT/test



Linux下find命令_find命令_02




3)在$HOME目录及其子目录中,查找所有文件


admin@bogon ~]$ find ~ -name '*' -print


Linux下find命令_子目录_03





4)具有条件的查找


     -a  与条件


     -o  或条件


     -not 非条件(此参数的功能类似于否定参数‘!’)






1)



[admin@bogon ~]$ find -name "t*" -a -name "*.c" //查找以t为开头,以.c为结尾的文件



./test.c



[admin@bogon ~]$



Linux下find命令_子目录_04






2)


[admin@bogon ~]$ find -name "t*" -o -name "*.c" //查找以t开头或者以.c为结尾的文件


./test.c


./test


./.gnupg/trustdb.gpg


./BIT/test


./BIT/test-bak


./.gconf/apps/nautilus/desktop-metadata/trash


./.gconf/apps/panel/applets/trash_applet


[admin@bogon ~]$


Linux下find命令_find命令_05





3)用!来表示找到不以.c为结尾的文件


[admin@bogon ~]$ find ./ ! -name '*.c' -print


Linux下find命令_查找文件_06





4)找到不以.c为结尾的文件


[admin@bogon ~]$ find ./ not -name '*.c' -print


./test.c


find: `not': No such file or directory


[admin@bogon ~]$ find -name "t*" -not -name "*.c"


./test


./.gnupg/trustdb.gpg


./BIT/test


./BIT/test-bak


./.gconf/apps/nautilus/desktop-metadata/trash


./.gconf/apps/panel/applets/trash_applet


[admin@bogon ~]$




2.根据文件类型搜索:


普通文件  f


符号文件   l


目录          d


字符设备     c


块设备        b


套接字        s


管道文件     p



Linux下find命令_查找文件_07


Linux下find命令_子目录_08







3.根据文件大小


-size


通过-size选项可以通过文件大小查找文件。


-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。

b——块(512字节); c——字节; w——字(2字节);



k——千字节 ; M——兆字节; G——吉字节。






[admin@bogon ~]$ find -size +18k   查找比18k大的文件




Linux下find命令_find命令_09






[admin@bogon ~]$ find -size -18k  查找比18k小的文件




Linux下find命令_find命令_10






4.按照文件深度进行查找



-maxdepth



-mindepth 



用来限定搜索指定目录的深度。






1)在root目录以及子目录下查找文件名为test的文件



Linux下find命令_find命令_11



2) find -maxdepth 2 -name test    在root目录以及深度为1的子目录中查找文件名为test的文件


Linux下find命令_查找文件_12



3)find -mindepth 1 -maxdepth  -name test    在深度为0的子目录以及深度为5的子目录中查找文件


名为test的文件




5.根据文件权限来查找


-perm 


find -perm 664



Linux下find命令_查找文件_13












6.按照文件时间进行查找


linux文件系统中的每个文件都有三种时间戳:



访问时间(atime——access time):就是上次访问这个文件的时间。
 2. 改变时间(ctime——change time):就是文件的inode改变的时间(什么是inode?)当你往一个文件中添加数据或者删除数据的时候,修改文件所有者的时候,链接改变的时候,文件的ctime就会发生改变。

修改时间(mtime——modification time):就是文件的内容上一次发生改变的时候的时间。

1)



[admin@bogon ~]$ find -type f -atime -2




Linux下find命令_查找文件_14

2) [admin@bogon ~]$ find -atime +10




Linux下find命令_子目录_15



3)find ./ -newer test.c   查找比test.c还要新的文件



Linux下find命令_子目录_16