参考资料
- 菜鸟教程-Linux find 命令
- Linux 中使用 find 命令查找文件
- linux find命令详解 💪
- findコマンドの使い方を簡単に理解するための7つのルール+実践的な知識
一. 基本语法
1.1 配置项
| 配置项(简写) | 说明 |
|---|
| -name | 按照文件名查找文件,不忽略大小写 | | -iname | 按照文件名查找文件,忽略大小写 | | -type | 按照文件类型查找文件 | | -size | 按照文件大小查找 | | -perm | 按照权限查找 | | -user | 按照用户名查找 |
⏹-type配置项的描述符
⏹-size配置项的描述符
1.2 常用动作
| 动作 | 说明 |
|---|
| -exec 命令体 {} ; | 对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令 命令的末尾必须以\;结束 | | -ls | 详细列出所找到的所有文件 | | -print | 在标准输出设备上显示查找出的文件名 | | 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文件
- 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
复制代码
三. -path 通过路径和文件名查找
- 如果想要在指定目录下,搜索某目录中的某文件,应该使用-path而不是-name
- apluser@ubuntu24-01:~$ ls -ld work/{T,W}*
- drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/T0_0_d
- drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/T0_1_d
- drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/T0_2_d
- drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/T0_3_d
- drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/T0_4_d
- drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/W0_0_d
- drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/W0_1_d
- drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/W0_2_d
- drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/W0_3_d
- drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/W0_4_d
- apluser@ubuntu24-01:~$
- apluser@ubuntu24-01:~$ find work -path "*T*/a.txt"
- work/T0_2_d/a.txt
- work/T0_3_d/a.txt
- work/T0_1_d/a.txt
- work/T0_4_d/a.txt
- work/T0_0_d/a.txt
- apluser@ubuntu24-01:~$
- apluser@ubuntu24-01:~$ find work -path "*2*/a.txt"
- work/T0_2_d/a.txt
- work/W0_2_d/a.txt
复制代码
四. -type 按照类型查找
4.1 查找文件夹路径
- # 查找指定目录下的指定文件夹路径
- find ./jmw_work_space/ -name "2024*" -type d
复制代码
4.2 查找文件路径
- find ./jmw_work_space/ -name "2024*" -type f
复制代码
五. -size 按照文件大小查找
5.1 查找等于指定大小的文件/目录
- find ./jmw_work_space/ -size 0k -ls
复制代码
5.2 查找大于指定大小的文件/目录
- find ./jmw_work_space/ -size +2M | xargs ls -l
复制代码
5.3 查找小于指定大小的文件/目录
- find ./jmw_work_space/ -size -2k
复制代码
5.4 查找大小在指定范围之内的文件
- -size +2k -size -10M:2k < 大小 < 10M
- 这样会查询出文件夹
- find ./jmw_work_space/ -size +2k -size -10M
复制代码
- find ./jmw_work_space/ -size +2k -size -10M -type f
复制代码
- find ./jmw_work_space/ -size +2k -size -10M -name "*.png"
复制代码
六. -mtime 按照时间查找
6.1 查找90天之前的文件 - find /nas/if_data/DIO001/ -type f -mtime + 90
复制代码
6.2 查找90天之前的文件并删除
- # 使用 -exec 效率不高
- find /nas/if_data/DIO001/ -type f -mtime + 90 -exec rm {} \;
复制代码
- 使用 xargs 会将文件名分批传递给 rm,减少了创建子进程的开销,提高了效率。
- # 先输出 rm 命令和文件名列表,确认无误后再去掉 echo 执行实际删除操作。
- find /nas/if_data/DIO001/ -type f -mtime +90 -print0 | xargs -0 echo rm
- # 直接执行删除命令
- find /nas/if_data/DIO001/ -type f -mtime +90 -print0 | xargs -0 rm
复制代码
七. 查找时,仅显示文件名,不显示路径
- apluser@ubuntu24-01:~$ find . -name "*.properties" -exec basename {} \;
- apluser@ubuntu24-01:~$ find . -name "*.properties" | xargs -I {} basename {}
- maven-wrapper.properties
- common.properties
- messages_ja.properties
- messages_zh.properties
- messages.properties
复制代码 |