find是Linux系统管理员所喜爱用的必备工具之一,它可以很轻松地找到你想要的文件。
【功能】
查找文件,可遍历指定目录按相应的条件查找所需要的文件
【语法】
find [查找路径……] [查找条件] [处理动作]
(1)查找路径
默认为当前目录,也可以遍历整个文件系统
运行如下三个 find 命令将得到相同的结果 — 当前目录和所有子目录中的所有文件(包括隐藏文件)的完整清单:
#find
#find .
#find . -print
(2)查找条件
1)按文件名查找: -name
支持使用通配符查找:* 、?、[ ]
[举例]
查找时注意文件名区分大小写
-iname选项:不区分大小写进行查找
2)按文件属主、属组查找
-user 用户名
-group 组名
find命令也支持使用uid和gid进行查找
-uid
-gid
find命令也可以查找“无主(组)”的文件
-nouser (文件的属主在/etc/passwd中不存在)
-nogroup(文件所属的组在/etc/group中不存在)
[举例]
find /var/log -user root -group utmp
3)按文件大小查找
-size [+/-] n[cwbkMG]
+表示大于的意思
-表示等于的意思
文件大小的单位可以是:
b——数据块
c——字节
w——双字节
k——KB
M——MB
G——GB
-empty 文件大小为0
[举例]
-size +2M 大于2M的文件
-size -2M 小于2M的文件
-size 2M 2M(1-2M之间的文件都是)
4)按文件类型查找
-type 文件类型
文件类型可以是:
-f 普通文件
-d 目录
-b 块设备
-c 字符设备
-p 命名管道
-l 链接
-s socket文件
[举例]
find /etc/ -type d
相关阅读:
Linux系统文件查找命令find的基本使用及其高级用法 http://www.linuxidc.com/Linux/2013-05/84991.htm
Linux运维利器–find命令 http://www.linuxidc.com/Linux/2013-05/84690.htm
Linux中find常见用法示例 http://www.linuxidc.com/Linux/2013-03/81426.htm
Linux find 命令详解 http://www.linuxidc.com/Linux/2013-04/82828.htm
Linux学习—find命令使用技巧 http://www.linuxidc.com/Linux/2013-03/81374.htm
find的基本使用命令 http://www.linuxidc.com/Linux/2013-03/80864.htm
15个高级的Linux find命令示例 http://www.linuxidc.com/Linux/2013-10/91163.htm
5)按文件时间属性查找
? 以天为单位
1. –mtime [+/- n]——指定时间范围内文件内容被修改过
2. –ctime [+/- n]——指定时间范围内文件属性被修改过
3. –atime [+/- n]——指定时间范围内文件被读取或访问过
? 以分钟为单位
1. –mmin [+/- n]——指定时间范围内文件内容被修改过
2. –cmin[+/- n]——指定时间范围内文件属性被修改过
3. –amin [+/- n]——指定时间范围内文件被访问过
理解查找时间
[举例]
find /var/log/ -type f -mtime +3 #在/var/log目录下查找3天以前被修改过的文件
find ./ -mmin +5 -mmin 10 #搜索当前目录下前5分钟到10分钟修改过的文件
6)按文件权限查找
-perm 模式,权限模式有以下几种:
mode:精确匹配
/mode: 任何一位匹配都行
-mode:文件权限能完全包含mode时才算匹配
+mode:一种旧的匹配方式,和/mode模式效果一样,建议使用/mode模式代替
[举例]
7)组合条件查找
在使用find命令时,也可使用多个条件组合进行查找,查找条件之间的逻辑关系有以下三种:
? 与:-a 缺省
? 或:-o
? 非:!,-not(运算优先级最高)
[举例]
find / -type f -a -name ‘*.sh’与find / -type f -name ‘*.sh’效果一样,都是在整个文件系统中查找以.sh结尾的文件
find /tmp ! -user Hadoop -a ! -empty
find /tmp -not \( -user hadoop -o -empty \)
find /tmp ! -user hadoop -o ! -empty
find /tmp ! \( -uesr hadoop -a -empty \)
find / -nouser -o -nogroup
find / \( -perm -2000 -o -perm -4000 \) -ls
8)其他选项
-depath选项
先匹配所有的文件,再在子目录中查找
-maxdepth级别
定义find遍历目录的层次
-fstype 指定查找的文件系统类型
(3)处理动作
find命令对查找匹配的文件有四个处理动作:
? -print:将匹配的文件输出到标准输出
? -ls:类似ls -l的形式显示每一个文件的详细信息
? -exec command {} \;
对匹配的文件执行相应的shell命令,{}占位符代表匹配的文件,注意{}和;之间的空格
? -ok command {} \;
-ok和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
[举例]
find ./ -type f -size 0 -exec rm {} \;
(4)find命令补充-xargs
xargs 它能够捕获一个命令的输出,然后传递给另外一个命令
在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。
这时候就体现出xargs命令的价值了,特别是与find命令一起使用。
find把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高; 而使用xargs命令则只有一个进程。
[举例]
find ./ -type f -perm -002 | xargs chmod o-w
find /tmp -name core -type f -print | xargs /bin/rm -f