文件查找


有些时候,我们可能会忘了某个文件所在的位置,此时就需要通过find来查找。
还有些时候,我想要找到,某个目录下,所有小于1k的文件。
还还有些时候,我们想要找到,某个目录下,7天之前创建的文件。
还还还有些时候,我们想找到,某个目录下,所有以.sh结尾的脚本。
Linux系统中的find命令在查找文件时非常有用而且方便。
它可以根据不同的条件来进行查找文件:例如权限、拥有者、修改日期/时间、文件大小等等。 同时find命令
是Linux下必须掌握的。

命令 路径 选项 表达式 动作
find path options expression action
逻辑运算符 作用
-o 或者
-a

根据文件名字查找 ----- 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/