【linux find命令】在目录中查找文件并删除文件
文章目录
- find命令格式
- 一、按文件名搜索
- 二、按文件大小搜索
- 三、按修改时间搜索
- 四、按文件类型搜索
- 五、按权限搜索
- 六、按所有者和所属组搜索
- 七、逻辑运算符
- 八、其他选项
find命令格式
find pathname -options [-print -exec -ok]
find有两个参数:
- pathname,第一个参数用来指定搜索路径。
- options,第二个参数用来指定搜索内容。
find命令搜索不建议过大的搜索范围,会消耗较大的系统资源,导致服务器压力过大。
一、按文件名搜索
find 搜索路径 【选项】 搜索内容
选项:
- -name:按文件名搜索
- -iname:按文件名搜索,不区分文件名大小
- -inum: 按inode号搜索
举例说明:
- name
# 搜索的文件名必须和你的搜索内容一致才能找到。如果只包含搜索内容,则不会找到。
[wqf@b1i10 rm_test]$ find ./ -name test_3.txt
./test_3.txt
- iname
Linux 中的文件名是区分大小写的,也就是说,搜索小写文件,是找不到大写文件的。
# 不区分文件名大小写,用iname
[wqf@b1i10 rm_test]$ find ./ -iname test_3.txt
./TEST_3.TXT
./test_3.txt
- inum
每个文件都有 inode 号,如果我们知道 inode 号,则也可以按照 inode 号来搜索文件。
# 如果知道文件名,用"ls -i"来査找inode号
[wqf@b1i10 rm_test]$ ls -i test_3.sh
29884450 test_3.sh
# 如果知道inode号,则可以用find命令来査找文件
[wqf`在这里插入代码片`@b1i10 rm_test]$ find ./ -inum 29884450
./test_3.sh
基于目录深度搜索
find 命令是递归遍历文件夹,列出当前目录及子目录下所有文件
命令 " find ./ -name "*.txt" " ,./ 路径下列出当前目录及子目录下以.txt结尾的文件。
如果想不递归查找文件夹,只要当前目录下的符合搜索范围的文件。
命令 " find ./ -maxdepth 1 -name "\*.txt" " ,./ 当前目录下查找以.txt结尾的文件,-maxdepth 1表示查找深度为1。
如果想搜索当前目录下面至少2个子目录的所有文件
命令 " find ./ -mindepth 2 -name "\*.txt" "
二、按文件大小搜索
find 搜索路径 【选项】 搜索内容
选项:
- -size[+-]大小:按照指定大小搜索文件
“+“的意思是搜索比指定大小还要大的文件,”-” 的意思是搜索比指定大小还要小的文件。
find 默认的单位是512Byte,如果单位为b或不写单位,则按照 512Byte搜索,其他大小搜索单位如下:
'c' for bytes#搜索单位是c,按照字节搜索
'w' for two-byte words
#搜索单位是w,按照双字节(中文)搜索
'k'for Kilobytes (units of 1024 bytes)
#按照KB单位搜索,必须是小写的k
'M' for Megabytes (units of 1048576 bytes)
#按照MB单位搜索,必须是大写的M
'G' for Gigabytes (units of 1073741824 bytes)
#按照GB单位搜索,必须是大写的G
举例说明:
# 当前目录下面有一个大小是2M的文件
[wqf@b1i10 rm_test]$ ls -l --block-size=M mon_tj_cal.txt
-rw-rw-r-- 1 summary_fz_province summary_fz_province 2M Dec 2 12:53 mon_tj_cal.txt# 当前目录下,查找大小刚好2M的文件,可以找到
[wqf@b1i10 rm_test]$ find ./ -size 2M
./mon_tj_cal.txt# 搜索小于2M的文件,可以找到很多其他文件
[wqf@b1i10 rm_test]$ find ./ -size -2M
./
./mon_tj_cal.sh
./file.patch
./test_3.sh
./file1.txt
./newtest1
./4.sh
./TEST_3.TXT
./test.txt
./testfile.txt
./1.txt
./test_3.txt
./newtest2
./execute_test.sh
./file2.txt
./test_1.sh
./mon_tj_cal_1.sh
./test_2.sh
三、按修改时间搜索
find 搜索路径 【选项】 搜索内容
选项:
- -atime[+-]时间:按文件访问时间搜索,记录文件最后一次被访问的时间。
- mtime[+-]时间:按文件数据修改时间搜索,当对这个文件内容进行修改后,modify显示的时间就会更新一次。
- ctime[+-]时间:按文件状态修改时间搜索,当文件内容、更改文件权限,链接属性时随文件inode更改而改变的时间。
以mtime来举例 “[±]” 时间的含义。
-5:代表 5 内修改的文件。
5:代表前 5~6 天那一天修改的文件。
+5:代表 6 天前修改的文件。
# 查找6天前修改的文件
[wqf@b1i10 rm_test]$ find ./ -mtime +5
./mon_tj_cal.sh
./newtest1
./4.sh
./test.txt
./testfile.txt
./1.txt
./mon_tj_cal.txt
./newtest2
./gz_silence_val_1.sh
./execute_test.sh
./mon_tj_cal_1.sh# 查找5天内修改过的文件
[wqf@b1i10 rm_test]$ find ./ -mtime -5
./
./test_3.sh
./TEST_3.TXT
./test_3.txt
./test_1.sh
./test_2.sh# 查找 5~6 天那天修改的文件
[wqf@b1i10 rm_test]$ find ./ -mtime 5
./file.patch
./file1.txt
./file2.txt
四、按文件类型搜索
find 搜索路径 【选项】 搜索内容
选项:
- -type d:查找目录
- -type f:查找普通文件
- -type l:查找软链接文件
举例说明:
# 查找./目录下面有哪些子目录
[wqf@b1i10 zxt_test]$ find ./ -type d
./
./take_data
./make_data
./drop_tables
./drop_tables/history
./drop_tables/test
./rm_test
./python
./push_data
五、按权限搜索
find 搜索路径 【选项】 搜索内容
选项:
- -perm 权限模型:查找文件权限刚好等于“权限模型”的文件
- -perm -权限模式:査找文件权限全部包含"权限模式"的文件
- -perm /+权限模式:査找文件权限包含"权限模式"的任意一个权限的文件
Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。我们规定 数字 4 、2 和 1表示读、写、执行权限(具体原因可见下节权限详解内容),即 r=4,w=2,x=1 。
Linux下权限的粒度有 拥有者 、群组 、其它组 三种。每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限
举例说明:
# 测试
[wqf@b1i10 test]$ touch test_1.sh test_2.sh test_3.sh test_4.sh
[wqf@b1i10 test]$ chmod 200 test_1.sh (只有拥有者有写的权限。)
[wqf@b1i10 test]$ chmod 444 test_2.sh (所有用户只拥有读的权限。)
[wqf@b1i10 test]$ chmod 600 test_3.sh (只有拥有者有读写权限。)
[wqf@b1i10 test]$ chmod 755 test_4.sh (拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。)# 查看权限
[wqf@b1i10 test]$ ll
total 0
--w------- 1 wqf wqf 0 Jan 10 15:13 test_1.sh
-r--r--r-- 1 wqf wqf 0 Jan 10 15:13 test_2.sh
-rw------- 1 wqf wqf 0 Jan 10 15:13 test_3.sh
-rwxr-xr-x 1 wqf wqf 0 Jan 10 15:13 test_4.sh# 按照指定权限搜索文件,文件的权限必须和搜索指定的权限一致,才能找到
[wqf@b1i10 test]$ find ./ -perm 200
./test_1.sh
[wqf@b1i10 test]$ find ./ -perm 444
./test_2.sh# "-perm-权限模式":必须完全包含。
# 因为 test_1.sh 的权限是200(--w-------)、test_3.sh 的权限600(-rw-------)、test_4.sh 的权限755(-rwxr-xr-x),所以可以找到;而test_2.sh的权限是(-r--r--r--),不包括200(--w-------)权限,所以找不到。
[wqf@b1i10 test]$ find ./ -perm -200
./
./test_3.sh <-此文件权限为600
./test_4.sh <-此文件权限为755
./test_1.sh <-此文件权限为200# "-perm+权限模式":包含任意一个指定权限,就可以找到。
# 因为test_2.sh的权限444(-r--r--r--)、test_3.sh 的权限600(-rw-------)、test_4.sh 的权限755(-rwxr-xr-x)都含有444(-r--r--r--)权限,所以可以找到;而test_1.sh 的权限是200(--w-------),所以找不到。[wqf@b1i10 test]$ find ./ -perm /+444
./
./test_3.sh <-此文件权限为600
./test_4.sh <-此文件权限为755
./test_2.sh <-此文件权限为444
六、按所有者和所属组搜索
find 搜索路径 【选项】 搜索内容
选项:
- -uid 用户 ID:按照用户 ID 査找所有者是指定 ID 的文件
- -gid 组 ID:按照用户组 ID 査找所属组是指定 ID 的文件
- -user 用户名:按照用户名査找所有者是指定用户的文件
- -group 组名:按照组名査找所属组是指定用户组的文件
-nouser:査找没有所有者的文件
七、逻辑运算符
find 搜索路径 【选项】 搜索内容
选项:
- -a:and逻辑与
- -o:or逻辑或
- -not:not逻辑非
举例说明:
1)-a:and逻辑与
find 命令也支持逻辑运算符选项,其中 -a 代表逻辑与运算,也就是 -a 的两个条件都成立,find 搜索的结果才成立。
#在当前目录下搜索等于1115KB,并且文件类型是普通文件的文件
[wqf@b1i10 rm_test]$ find ./ -size 1115k -a -type f
./mon_tj_cal.txt
2) -o:or逻辑或
-o 选项代表逻辑或运算,也就是 -o 的两个条件只要其中一个成立,find 命令就可以找到结果。
#在当前目录下搜索文件名要么是cals的文件,要么是test_3.sh的文件
[wqf@b1i10 rm_test]$ find ./ -name cals -o -name test_3.sh
./test_3.sh
./test/test_3.sh
3) -not:not逻辑非
-not是逻辑非,也就是取反的意思。
#在当前目录下搜索文件名不是test_3.sh的文件
[wqf@b1i10 test]$ find ./ -not -name test_3.sh
./
./test_4.sh
./test_1.sh
./test_2.sh
八、其他选项
1)-exec选项
find 搜索路径 【选项】 搜索内容 -exec 命令2 {} \;
注意: 这里的"{}“和”\;“是标准格式,只要执行”-exec"选项,这两个符号必须完整输入,并且{} 与 \之间有空格。这个选项的作用其实是把 find 命令的结果交给由"-exec"调用的命令 2 来处理。"{}"就代表 find 命令的査找结果, \ 做转义,; 结束符。
举例说明:
# 查找当前开始30天之前的并且文件名以".log"结尾的文件并删除
# 使用"-exec"选项,把find命令结果直接交给"rm -rf"命令处理。
find ./ -type f -name "*.log" -mtime +30 -maxdepth 1 -exec rm -rf {} \;
2)-ok选项
find 搜索路径 【选项】 搜索内容 -ok 命令2 {} \;
与"-exec"选项的作用基本一致,区别在于:“-exec"的命令会直接处理,而不询问;”-ok"的命令 2 在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行。
举例说明:
# 使用rm命令来删除find找到的结果,删除的动作最好确认一下
[wqf@b1i10 test]$ find ./ -perm 444 -ok rm -rf {} \;
< rm ... ./test_2.sh > ? y # 需要用户输入y,才会执行
3)-print选项:将find命令匹配的文件输出到标准输出
find 搜索路径 【选项】 搜索内容 -print ;
举例说明:
# 查找当前文件夹下文件名以".log"结尾的文件并输出到屏幕
[wqf@b1i10 rm_test]$ find ./ -name "*.log" -print
./data_val_520_13138333854_2022122200.log
./data_val_520_20221221_2022122117.log
./mon_tj_cal_1_2022120515.log
./mon_tj_cal_1_2022120510.log
【linux find命令】在目录中查找文件并删除文件相关推荐
- linux 多级目录查找,Linux如何在多级目录中查找某个文件
Linux在多级目录中查找某个文件的方法:find /dir -name filename.ext du -a | grep filename.ext locate filename.ext Linu ...
- linux find 排除目录,linux find命令忽略目录的查找方法
在linux操作系统中,find命令非常强大,在文件与目录的查找方面可谓无所不至其极,如果能结合xargs命令使得,更是强大无比. 以下来看看find命令忽略目录查找的用法吧. 例1,根据文件属性查找 ...
- linux相对路径列出目录文件,linux – UNIX:列出目录中具有相对路径的文件
问题是: 您将使用什么命令列出您的文本文件 fileAsst目录(使用相对路径)? 上一个问题是: 命令列出这些文本文件的名称,使用fileAsst目录的绝对路径作为命令的一部分. 答案是: ~/Un ...
- 【linux命令】Linux du 命令(显示目录或文件的大小)
文章目录 1. Linux du 命令 2. 语法: 3. 实例 3.1 显示目录或者文件所占空间 3.2 显示指定文件所占空间 3.3 方便阅读的格式显示test目录所占空间情况 3.3.1 列出超 ...
- linux查找最近访问的文件,教您在Linux系统中查找最近修改的文件/文件夹
如果您使用Linux系统进行日常操作,则主目录文件将随时间急剧增加.如果您有成千上万个文件,很可能不记得最近更改的文件名,本文将教您在Linux系统中查找最近修改的文件/文件夹.另外,如果要检查出于任 ...
- 使用ls命令查看Linux的目录结构,linux ls命令查看目录文件详解
首页 > Linux教程 > 常用命令 > ls 查看目录文件 linux ls命令查看目录文件详解 linux中ls命令用来查看目录中的所有文件和子目录,可选的参数比较多,本文筛选 ...
- linux添加目录命令权限,linux chmod命令设置目录/文件权限详解
首页 > Linux教程 > 常用命令 > chmod 文件权限 linux chmod命令设置目录/文件权限详解 linux中chmod命令用于改变系统文件或目录的访问权限,用数字 ...
- python模糊查找文件夹名字_python实现在目录中查找指定文件的方法
本文实例讲述了python实现在目录中查找指定文件的方法.分享给大家供大家参考.具体实现方法如下: 1. 模糊查找 复制代码 代码如下: import os from glob import glob ...
- 从目录中查找最大和最小的文件(不包括子目录)
从目录中查找最大和最小的文件(不包括子目录),学会使用File类的一些基本方法的调用.代码如下: package file;import java.io.File;public class FindM ...
- python 查找指定文件_python实现在目录中查找指定文件的方法
本文实例讲述了python实现在目录中查找指定文件的方法.分享给大家供大家参考.具体实现方法如下: 1. 模糊查找 代码如下: import os from glob import glob #用到了 ...
最新文章
- 趣谈网络协议笔记-二(第十二讲)
- 湖北地区的一些主要DNS服务器
- PHP随机配菜_PHP+JS三级菜单联动菜单实现方法
- 打开高效文本编辑之门_Linux sed之多行命令与循环命令
- anaconda的执行路径
- 引用和指针-内存的分配方式有几种
- 为什么同步的StringBuffer从来都不是一个好主意
- Jira 随便总结
- php aura,AuraPHP路由器没有拿起参数
- java kafka client_Kafka Client API 基本使用
- 机器人机电液控制一体化联合仿真
- Android信息处理机制
- statsmodels.stats.proportion.proportions_ztest
- matlab两个力的合成与分解,[转帖]小波图像分解与合成(例子) - Matlab讨论区 - 振动论坛 动力学,噪声 -......
- 四、HTML标签:图片标签
- close函数 qt_QT中关闭应用程序和窗口的函数(quit(),exit()以及close()的区别)
- C++ 泛型编程 map(统计人数)
- 动态代理是什么?应用场景?
- C# 打印调试信息到DebugView
- 微信小程序开发聊天室——实时聊天,支持图片预览
热门文章
- 如何同步化本地svn库到googlecode
- 零基础也能用ChatGPT写代码,简直不要太爽
- Springboot毕设项目高校教材征订系统设计与实现ig8t1(java+VUE+Mybatis+Maven+Mysql)
- DICOM图像全方位解读
- 模块化-CMJESM
- python记忆式键入,在Python编程模式下输入命令”print(100+200)“执行的结果是()
- Ubuntu下解压rar文件的方法
- 【OpenGL】Android 中的 skia 和 OpenGL ES
- Android 更换开机logo和开机动画
- 16.为什么进行抓包测试