利用find查找指定的内容属于实时查找,匹配精确,速度快,所以熟练掌握find的使用,对我们是很有帮助的
find的基本语法格式:
find [查找位置] [查找标准] [处理动作]
查找位置:默认为当前目录
查找标准:默认为查找指定目录下的所有文件
处理动作:显示到标准输出,
查找标准
文件名
-name "文件名称" : 根据文件名查找,支持glob(文件名通配:*,[],?)
[root@localhost ~]# find /etc/ -name "ifcfg-eth0"/etc/sysconfig/network-scripts/ifcfg-eth0
-iname "文件名称",根据文件名查找,不区分大小写
[root@localhost ~]# mkdir ABC abc aBc[root@localhost ~]# find -iname "abc"./ABC./abc./aBc
文件的属主、属组
-user USERNAME : 根据属主查找
-group GROUP : 根据属组查找
-uid UID : 根据UID查找
-gid GID : 根据GID查找
-nouser : 查找没有属主的文件
-nogroup : 查找没有属组的文件
1、查找/var目录下属主为root并且属组为mail的所有文件;find /var -user root -group mail2、查找/usr目录下不属于root,bin,或student的文件;find /usr -not \( -user root -o -user bin -o -user student \)find /usr -not -user root -a -not -user bin -a -not -user student
文件类型
-type
f: 普通文件
d: 目录
b: 块设备
c: 字符设备
l: 符号链接
p: 命名管道
s: 套接字文件
查找当前目录下类型不是目录,而且没有属主的文件find / -not -type d -a -nouser
按文件大小查找
-size +|- #单位
一般使用“+”、“-”号设置超过或小于指定的大小作为查找条件
常用的容量单位包括k(注意是小写)、M、G。
5、查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中;find /etc -size +1M -exec echo {} >> /tmp/etc.largefiles \;
文件修改时间
-atime [+|-]# :访问时间,默认为天,#表示#天的这个时间点,+#表示至少有#天没访问, -#表示#天之内没访问
-mtime [+|-]# : 修改时间,#表示#天的这个时间点没有被修改,+#表示至少有#天没有修改 , -#表示#天之内没有修改
-ctime [+|-]# : 改变时间,#表示#天的这个时间点没有被改变,+#表示至少有#天没有被改变 , -#表示#天之内没有被改变
-amin [+|-]# : 时间为分钟,#表示#分钟的这个时间点没有被访问,+#表示至少有#分钟没有被访问 , -#表示#分钟之内没访问
-mmin [+|-]# : 时间为分钟,#表示#分钟的这个时间点没有被修改,+#表示至少有#分钟没有被修改 , -#表示#分钟之内没有被修改
-cmin [+|-]# : 时间为分钟,#表示#分钟的这个时间点没有被改变,+#表示至少有#分钟没有被改变 , -#表示#分钟之内没有被改变
查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件;find /etc -mtime -7 -a -not -user root -a -not -user studentfind /etc -mtime -7 -a -not \( -user root -o -user student \)
文件权限
-perm [+|-] MODE
不带[+|-]表示精确权限匹配,
+表示任何一类用户的任何一位权限匹配
- 表示每类用户的每位权限都匹配
查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息;find /etc -not -perm +222
-print: find命令将匹配的文件输出到标准输出。
-exec: 指定后面要执行的命令,相应命令的形式为'command' { } \;,注意{ }和\;之间的空格
# 在当前目录下查找除目录以外的所有类型的文件 ,并打印出来[root@localhost test]# find . ! -type d –print#查找root目录下的以log结尾的文件,将其复制到test目录下。[root@localhost test]# find /root/ –name “*log” –type f –exec cp {} /root/test/ \;#通过-exec参数指定后面要执行的命令,{}表示将查找到的内容全部复制,\;表示命令的结束#长格式显示test下的普通文件[root@localhost test]# find . -type f -exec ls -l { } \;#删除test下大小为0的文件[root@localhost test]# find ./ -size 0 -exec rm {} \;#在当前目录中查找所有文件名以.conf结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示[root@localhost test]# find . -name "*.conf" -mtime +5 -ok rm { } \;