参考资料
一. 基本语法
find 指定目录 寻找条件 查完后执行的动作
1.1 配置项
配置项(简写) | 说明 |
---|---|
-name | 按照文件名查找文件,不忽略大小写 |
-iname | 按照文件名查找文件,忽略大小写 |
-type | 按照文件类型查找文件 |
-size | 按照文件大小查找 |
-perm | 按照权限查找 |
-user | 按照用户名查找 |
⏹-type
配置项的描述符
d
:文件夹f
:普通文件l
:链接文件
⏹-size
配置项的描述符
c
:字节k
:KBM
:MBG
:GB
1.2 常用动作
动作 | 说明 |
---|---|
-exec 命令体 {} ; | 对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令 命令的末尾必须以 \; 结束 |
-ls | 详细列出所找到的所有文件 |
在标准输出设备上显示查找出的文件名 | |
xrags |
二. -name 按照文件名查找
2.1 按照文件名正则表达式查找
⏹当查找后缀名为.sh的文件时,需要使用双引号包裹,否则查询无效
# 在当前目录的 jmw_work_space 文件夹下查找 后缀为 .sh 的文件
find ./jmw_work_space/ -name "*.sh"
find ./jmw_work_space/ -name *.zip
⏹指定正则表达式
find ./jmw_work_space/ -name "20240[0-9]*.txt"
2.2 逻辑运算符
2.2.1 与 查找
⏹查找文件名后缀为.sh
并且 所属用户为 root
的文件
find ./jmw_work_space/ -name "*.sh" -user root
2.2.2 或 查找
⏹查找后缀名为.sh
的文件 或 文件名包含out的zip
文件
-o
:表示或
find ./jmw_work_space/ -name "*.sh" -o -name "out*.zip"
2.2.3 非 查找
⏹查找指定目录下 名称不包含address的文件,因为还使用了-type f
,所以不会匹配到文件夹
!
:取反
find ./jmw_work_space/20240127 ! -name "address*.txt" -type f
三. -type 按照类型查找
3.1 查找文件夹路径
d
:表示查找文件夹
# 查找指定目录下的指定文件夹路径
find ./jmw_work_space/ -name "2024*" -type d
3.2 查找文件路径
f
:表示查找文件,而不是文件夹
find ./jmw_work_space/ -name "2024*" -type f
四. -size 按照文件大小查找
4.1 查找等于指定大小的文件/目录
-size 0k
:查找大小为0k的文件/目录
find ./jmw_work_space/ -size 0k -ls
4.2 查找大于指定大小的文件/目录
-size +2M
:查找 > 2M 的文件/目录
find ./jmw_work_space/ -size +2M | xargs ls -l
4.3 查找小于指定大小的文件/目录
-size -2k
:查找 < 2k 的文件/目录
find ./jmw_work_space/ -size -2k
4.4 查找大小在指定范围之内的文件
-size +2k -size -10M
:2k < 大小 < 10M- 这样会查询出文件夹
find ./jmw_work_space/ -size +2k -size -10M
⏹加上
-type f
,限定只查询文件
find ./jmw_work_space/ -size +2k -size -10M -type f
⏹查询指定大小的文件,并且限定文件名
find ./jmw_work_space/ -size +2k -size -10M -name "*.png"
五. 组合命令实例
5.1 只查找当前目录,不查找子目录中的指定文件
-maxdepth
:指定查找目录的深度
# 只查找当前目录,不查找其子目录
find ./ -maxdepth 1 -type f -name "*.txt"
# 查找当前目录和其第1层的子目录
find ./ -maxdepth 2 -type f -name "*.txt"
5.2 查找到的文件批量复制到指定文件夹中
- 将work目录下后缀为dat的文件批量复制到temp文件夹中
-exec
选项执行cp
命令来复制文件{}
是一个占位符,会被实际找到的文件名替代\;
表示-exec
选项的结束
find ./work/ -name "*.dat" -exec cp {} /home/fengyehong/jmw_work_space/temp \;
5.3 查找到的文件批量修改所属用户和组
find ./ -maxdepth 1 -type f -user root -exec chown fengyehong:fengyehong {} \;
5.4 查找到的文件批量添加执行权限
find ./ -maxdepth 1 -name "*.sh" | xargs chmod u+x
5.5 查找到的文件内容全部导入指定文件
find /home/ -type f -name "*.txt" -exec cat {} \; > all.txt
5.6 查找指定目录下指定用户所属的文件
-user root
:文件所属用户为root-name "*.sh"
:文件名后缀为sh
find ./ -user root -name "*.sh"