文件查找
有些时候,我们可能会忘了某个文件所在的位置,此时就需要通过find来查找。
还有些时候,我想要找到,某个目录下,所有小于1k的文件。
还还有些时候,我们想要找到,某个目录下,7天之前创建的文件。
还还还有些时候,我们想找到,某个目录下,所有以.sh结尾的脚本。
Linux系统中的find命令在查找文件时非常有用而且方便。
它可以根据不同的条件来进行查找文件:例如权限、拥有者、修改日期/时间、文件大小等等。 同时find命令
是Linux下必须掌握的。
命令 |
路径 |
选项 |
表达式 |
动作 |
find |
path |
options |
expression |
action |
根据文件名字查找 ----- name
find 路径 -name '标题名'
## 查找配置网卡的路径
[root@moban ~]# find /etc -name '*ens33*' *用来控制边界 有则无边界
/etc/sysconfig/network-scripts/ifcfg-ens33
[root@moban ~]# find /etc -name 'ifcfg*'
/etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-ens33
## 在/etc/目录下找到以.conf结尾的文件和.sh结尾的文件
[root@moban ~]# find /etc -name '*.conf' -o -name '*.sh' -o是或者的
## 在/etc/目录下找到不是以.conf结尾的文件
[root@moban ~]# find /etc ! -name '*.conf' !是非
## 不区分大小写查找
[root@moban ~]# find ./ -iname 'lzd*'
./lzd.txt
./LZD.txt
**根据文件类型查找 ** ----type
-type 文件类型
### 文件类型
普通文件:f
目录:d
软链接文件:l
套接字文件:s
字符设备文件:c
块设备文件:b
管道文件:p
## 查找/etc/目录下,文件名中包含conf的目录
[root@moban etc]# find /etc -name '*conf*' -type d
**根据文件大小查找 **----- size
-size +:大于 -:小于 M大写 k小写 -delete (删除)
## 找大于于多少的文件
[root@moban etc]# find / -size +5M
## 找小于多少的文件
[root@moban etc]# find / -size -5k
## 等于 ------------ 不准确 block分区计算方式等等会影响
[root@moban etc]# find / -size 5M
## 找到~/目录下小于4k的文件并删除
[root@moban ~]# find ./ -size -4k -delete
根据文件的时间查找-------(mat)time
查看文件的详细信息
[root@moban ~]# stat 6.xxx
File: ‘6.xxx’
Size: 5 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 16797777 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2024-04-16 15:48:38.159828112 +0800
Modify: 2024-04-16 15:48:21.654828940 +0800
Change: 2024-04-16 15:48:21.654828940 +0800
Access---- 读取时间
Modify---- 修改时间
Change---- 创建时间 ----------- 基本会和修改M时间一样
+:查找N天之前的(不包含今天)
-:查找N天之内(包含今天)
N:指定往前N天
## 不加任何符号:查找不算今天往前数第7天的文件
-mtime 7
[root@localhost find]# find /root/find/ -mtime 7
## +7 不算今天往前数第七天之前的文件
[root@localhost find]# find /root/find/ -mtime +7
## -7 算今天,最近7天的文件
[root@localhost find]# find /root/find/ -mtime -7
## 需求:保留一周的数据
[root@localhost find]# find /root/find/ ! -mtime -7 -delete
根据用户查找
-user:查找指定用户
-group:查找指定用户组
-nouser:查找没有用户的文件
-nogroup:查找没有用户组的文件
## 查找属于root用户adm组的文件
[root@localhost ~]# find /root/ -user root -group adm -ls
[root@localhost ~]# find /root/ \( -group adm -o -user zls \) -l
需要转义和空格 来区分
## 查找没有用户或者没有组的文件
[root@localhost opt]# find /opt/ -nouser -o -nogroup
# 交给xagrs 来处理
[root@localhost ~]# find /root/ -user zls -o -group adm|xargs ls -l
根据文件权限查找
-perm 配合权限
## 精确查找文件的权限644
[root@moban ~]# find ./ -perm 644
## -:代表该权限位上,必须包含该数字权限622 rw w w
[root@moban ~]# find ./ -perm -644 -ls
## /:拥有者至少有r权限, 或者拥有组至少有r权限, 或者匿名至少有w权限 9个权限满足一个都可以
[root@moban ~]# find ./ -perm /644 -ls
根据深度查找
[root@localhost ~]# find /etc/ -maxdepth 1 -type d
动作
动作 |
作用(如果有逻辑运算符,就只查看逻辑运算符后面文件详细信息) |
print |
打印结果 |
-ls |
查看详细信息 |
-delete |
删除找到的文件 |
-ok |
执行后面的shell命令(不询问) {} 大括号内 |
-exec |
执行后面的命令 {} |
[root@localhost ~]# find /opt/ -type f -o -name '*st' -exec rm -fr {} \;
[root@localhost ~]# find /opt/ -type f -o -name '*st' -ok rm -fr {} \;
## 以后动作都改为xargs 后面加命令
[root@localhost ~]# find /opt/ -type f -o -name '*st'|xargs rm -fr
## 拷贝
[root@localhost ~]# find /root/ -type f|xargs cp -t /tmp/
[root@localhost ~]# find /root/ -type d|xargs -I {} cp -r {} /opt/