需要在系统中查找某个文件或者目录的时候,就需要用到find命令。它可以遍历给定的路径之下所有层级结构,来找到需要的文件。Find命令可以做到实时查找,精确查找,它需要遍历给定的目录下所有层级,所有速度略慢。



1、命令的格式:

find [OPTIONS] [路径] [条件] [处理动作]



2、命令的参数:

路径:给定具体的搜索起始路径,默认为当前目录。

查找条件:查找标准,可以根据文件名,从属关系,文件类型,大小,权限,时间等进行查找。

处理动作:查找完成后,可以指定命令对结果的操作。



3、命令的选项:

根据文件名称查找

-name :根据给定的名称查找;

-iname:查找名称时不区分大小写;

根据文件的从属关系查找

-user:根据属主查找;

-group:根据属组查找;

-uid:根据UID查找;

-gid:根据GID查找;

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

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

根据文件的类型查找:

-type 类型:

f:普通文件;

d:目录文件:

l:符号链接文件;

b:块设备文件;

c:字符设备文件;

p:管道文件;

s:套接字文件;

根据文件大小查找:

-size [+|-]#UNIT

单位:kMG

根据时间戳查找:

以‘天’为单位:

-atime:访问时间

-mtime:修改时间

-ctime:改变时间

以‘分钟’为单位:

-amin

-mmin

-cmin

根据权限查找:

-perm [/|-]mode

mode:精确权限匹配;

/mode:任意一类用户的权限中任意一位符合条件即满足;

-mode:每一类用户的权限中的每一位同时符合条件即满足;

条件组合:

-a:‘与’操作,默认选项;

-o:‘或’操作;

-not \ !:‘非’; 



4、处理动作

-print:标准输出;(默认)

-ls:对查找结果执行‘ls -l’命令,输出文件的详细信息;

-delete:删除查找的文件

-fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式保存至指定文件中;

-ok COMMAND {} \;   :对查找到的每个文件执行COMMAND命令,交互式操作;

-exec COMMAND {} \;    :对查找到的每个文件执行COMMAND命令;



5、其他说明

find查找到的结果,是一次性给出,并传递给后面的命令,但是有些命令不能接受过长的参数.

例如:find /etc -type f | ls -l 这样是错的。此时,可以用到xargs命令。

例如:find /etc -type f | xargs ls -l

Xargs可以读入查找到信息,并且以空白符或换行符作为分辨。将查找到的信息分隔成多个参数。



6、实例操作

①查找/home中所有的.txt文件并显示

find /home -type f -a -name *.txt -ls

②查找以大写字母开头的文件

find / -type f -a -name [A-Z]* -ls

③查找所有用户都可读写执行的文件

find / -type f -perm -007 -ls

④查找/etc目录下,所有用户都有执行权限,且其他用户有写权限的所有文件

find /etc/ -type f -a -perm -111 -a -perm -002 -ls

⑤查找/etc目录下,大于1M,且最近一周内容修改过的文件或目录

find /etc/ -size +1M -a -mtime -7 -ls

⑥查找/usr/目录下,不属于rootbinhadoop的所有文件或目录

find /usr/ -not \( -user root -o -user bin -o -user hadoop \) -ls