文件查找
find命令的基本语法
命令+路径+选项+表达式+动作
find查找分类
1.以名字查找文件
-name
在/etc/下找到以.sh结尾的文件
[root@oldboyedu ~]# find /etc/ -name '*.sh'
[root@oldboyedu ~]# find /etc/ -name '*.sh' -ls
2.文件类型查找
文件类型
d:目录(directory)
f:文件(file)
c:字符设备
b:块设备
l:软链接文件
s:套接字文件(socket)
p:管道文件
-type
查找/etc/目录下所有带conf的文件
[root@oldboyedu ~]# find /etc/ -type f -name '*conf*'
查找当前系统中,所有的管道文件
[root@oldboyedu ~]# find / -type p
/run/systemd/inhibit/1.ref
/run/systemd/sessions/1.ref
/run/systemd/initctl/fifo
[root@oldboyedu ~]# find / -type p -ls
39101 0 prw------- 1 root root 0 Jul 4 17:18 /run/systemd/inhibit/1.ref
41084 0 prw------- 1 root root 0 Jul 4 17:18 /run/systemd/sessions/1.ref
21199 0 prw------- 1 root root 0 Jul 4 17:18 /run/systemd/initctl/fifo
3.根据文件大小查找
-size
-a:多个条件同时满足
-o:或者,多个条件有一个满足即可
!:去反
+ :大于
- :小于
:等于
查找/目录下大于1G的所有文件
[root@oldboyedu ~]# find / -size +1G
查找一个脚本,名字带con
[root@oldboyedu ~]# find / -name '*.sh' -name '*con*'
查找一个脚本,名字不带con
[root@oldboyedu ~]# find / -name '*.sh' ! -name '*con*'
4.根据时间查找文件
-mtime:
+n:寻找n天之前(当天的不算)
-n:查找n天内的文件(当天的文件算在内)
n:查找第n的文件(当天的不算)
//创建测试文件
[root@zls ~]# for i in `seq -w 30`;do date -s 201802$i && touch file-$i;done
//查找7天以前的文件(不会打印当天的文件)
[root@zls ~]# find ./ -iname "file-*" -mtime +7
//查找最近7天的文件,不建议使用(会打印当天的文件)
[root@zls ~]# find ./ -iname "file-*" -mtime -7
//查找第7天文件(不会打印当天的文件)
[root@zls ~]# find ./ -iname "file-*" -mtime 7
//本地文件保留最近7天的备份文件, 备份服务器保留3个月的备份文件
find /backup/ -iname "*.bak" -mtime +7 -delete
find /backup/ -iname "*.bak" -mtime +90 -delete
5.根据用户来查找文件
-user:指定文件属主用户
-group:指定文件属组
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
[root@oldboyedu ~]# find /home/ -user zls -a -group
[root@oldboyedu ~]# find /home/ -user zls -group root
[root@oldboyedu ~]# touch /home/123.txt
[root@oldboyedu ~]# chown zls.root /home/123.txt
[root@oldboyedu ~]# find /home/ -user zls -group root
//查找没有属主
[root@zls ~]# find /home -nouser
//查找没有属组
[root@zls ~]# find /home -nogroup
[root@oldboyedu ~]# find /home -nogroup -nouser
注意:$() 和 `` :将引起 来的部分当成一个命令执行。
6.根据权限查找
-perm
644 :精确查找
-644:模糊查找
find处理动作
动作 | 含义 |
---|---|
打印查找到的内容(默认) | |
ls | 以长格式显示的方式打印查找到的内容 |
-delete | 删除查找到的文件(仅能删除空目录 |
-ok | 后面跟自定义shell命令(会提示是否操作 |
-exec | 后面跟自定义shell命令(标准写法-exec ;) |
//打印查询到的文件
[root@zls ~]# find /etc -name "ifcfg*"
[root@zls ~]# find /etc -name "ifcfg*" -print
[root@zls ~]# find /etc -name "ifcfg*" -ls
//拷贝文件
[root@zls ~]# find /etc -name "ifcfg*" -exec cp -rvf {} /tmp ;
//-ok会不断提示
[root@zls ~]# find /etc -name "ifcfg*" -ok cp -rvf {} /tmp ;
//删除文件
[root@zls ~]# find /etc -name "ifcfg*" -exec rm -f {} ;
[root@zls ~]# find /etc -name "ifcfg*" -delete
find结合xargs
#xargs将查找到结果一个一个的处理
[root@zls ~]# touch file.txt
[root@zls ~]# find . -name "file.txt" |xargs rm -f
[root@zls ~]# find . -name "file.txt" |xargs -I {} cp -rvf {} /var/tmp