前言
一、功能描述:
使用find命令可以将文件系统内符合条件的文件列出来,可以指定文件的名称、类别、时间、大小及权限等不同信息的组合,只有完全相符的文件才会被列出来。
find命令模糊搜索是比较消耗系统资源的,如果服务器负载比较高,尽量避开业务高峰期使用find命令。
命令语法:
find [路径] [选项]
语法选项
选项 | 含义 |
---|
-name <文件名> | 文件名搜索 |
-iname <文件名> | 忽略大小写 |
-user <用户名> | 按文件属主查找 |
-group <组名> | 按文件所属组查找 |
-size n[ckMG] | 按文件大小查询,n代表数字,c代表字节,k代表KB,G代表GB |
-type <文件类型> | 按文件类型查找 |
-nouser | 查找没有用户的文件 |
-nogroup | 查找没有组群的文件 |
-atime | n 在过去n天内被访问过的文件(atime表示文件中的数据库最后被访问的时间) |
-amin | n 在过去n分钟内被访问过的文件 |
-ctime | n 在过去n天内被改动过的文件(ctime表示文件的元数据发生变化,比如权限,所有者) |
-ctime | n 在过去n分钟内被改动过的文件 |
-mtime | n 在过去n天内被修改过的文件(mtime表示文件内容被修改的最后时间) |
-mtime | n 在过去n分钟内被修改过的文件 |
实例 1
按文件名查找
// 查找/test目录下名称为abc的文件
[root@cnLinuxer ~]# find /test -name abc**/test/abc
//查找根目录下abc文件,不区分大小写
[root@cnLinuxer ~]# find /test -iname abc/test/abc/test/ABC
实例 2
按文件大小查找
// 查找/data目录下超过10M的文件[root@cnLinuxer ~]# find /date -size +10M
// 查找/data目录下小于1G的文件[root@cnLinuxer ~]# find /date -size -1G
// 查找/data目录下等于98k的文件[root@cnLinuxer ~]# find /date -size 98k
实例3
按时间查找
// 查找1天内文件内容被修改的文件
[root@cnLinuxer ~]# find / -mtime -1 -type f
//查找1天前文件内容被修改的文件
[root@cnLinuxer ~]# find / -mtime +1 -type f
// 查找一天前被访问的文件
[root@cnLinuxer ~]# find / -atime +1 -type f
// 查找一天内被访问的文件
[root@cnLinuxer ~]# find / -atime -1 -type f
// 查找一天内状态被改变的文件
[root@cnLinuxer ~]# find / -ctime -1 -type f
// 查找10分钟前状态被改变的文件
[root@cnLinuxer ~]# find / -cmin +60 -type f
实例4
按权限查询
//查找/test目录下权限为777的所有文件
[root@cnLinuxer ~]# find /test -perm 777
实例5
按属主及属组查询
// 查找属主为esight的文件[root@cnLinuxer ~]# find / -user esight -type f
// 查找无属主的文件[root@cnLinuxer ~]# find / -nouser -type f
// 查找属组为esight的文件[root@cnLinuxer ~]# find / -group esight -type f
// 查找无属组的文件[root@cnLinuxer ~]# find / -nogroup -type f
实例5
执行命令
// 查找te.txt并删除,删除前提示[root@cnLinuxer ~]# find /test -name "te.txt" -ok rm {} \;< rm ... /test/te.txt > ?
// 查找te.txt 并备份为te.txt.bak[root@cnLinuxer ~]# find /test -name "te.txt" -exec cp {} {}.bak \;
总结
find 像是一组排好的物品,碟片、队伍,查找时。find 路径(在那查找) 选项 (按哪个属性查找) 可以是文件名 时间 大小 属主 权限查找
使用 find ./
这样的命令时,你正在从当前目录(./
)开始搜索文件和目录。
下面是 find
命令的详细解释:
基本语法
bashfind [路径...] [表达式]
表达式
表达式由一个或多个测试条件和一个或多个操作组成。测试条件用于确定哪些文件或目录应该被选中,而操作则定义了对于每个选中的文件或目录应该执行什么操作。
测试条件
操作
-print
:打印文件或目录的名称。
-exec
:执行指定的命令。
-delete
:删除文件或目录。
…等等。
示例
查找当前目录及其子目录下的所有 .txt
文件:
bashfind ./ -name "*.txt"
查找当前目录及其子目录下最近 7 天内被修改过的文件:
bashfind ./ -mtime -7
查找当前目录及其子目录下大于 1MB 的文件并打印它们的名称:
bashfind ./ -size +1M -print
查找当前目录及其子目录下所有名为 myfile
的文件并删除它们:
bashfind ./ -name "myfile" -exec rm {} \;
注意:在 -exec
操作中,{}
是一个特殊的占位符,它会被替换为当前找到的文件或目录的名称。\;
表示 -exec
操作的结束。
find
命令的功能非常强大,可以通过组合不同的测试条件和操作来执行复杂的搜索任务。要获取更详细的信息和更多的示例,你可以查看 find
命令的手册页,通过运行 man find
命令来访问。
1、-name //按名字查找
find ./ -name '*.sh'
2、-type //按类型查找
find ./ -type f (d/p/c/b/s/l) ---普通文件(目录/管道/字符设备/块设备/socket./符号连接)
3、-size //按大小查找
默认大小单位是512B(0.5K即:一个扇区的大小)
find ./ -size 1
find ./ -size +3M -size -7M 查找大小 大于3M小于7M的文件。(M是大写)
find ./ -size +47k -size -89k (k是小写)
4、-maxdepth //确定递归的次数
find ./ -maxdepth 1 -type d //递归一次,即仅找第一层目录
find ./ -maxdepth 2 -type d //递归2次,即会找到第二层目录
5、exec //对find的结果集进行操作。
find ./ -name '*.sh' | ls -lh ----->会发现所有的文件都显示出来了
正确写法:
find ./ -name '*.sh' -exec ls -lh {} \;
exec 跟 xargs类似,{}中执行的是find ./ -name '*.sh' 的结果;
\; 是转义分号字符,
find ./ -name '*.sh' -ok rm -r {} \; 将exec换成ok, 删除操作会进行提示,我们输入y or n 来进行操作
6、 xargs //没有-
不用exec的话,可以使用xargs ,此时需要用管道
exec:是将find的结果集一次性的投入到缓冲区后执行后续的命令,缓冲区有可能充满;
xargs:是将find的结果集分批投入缓冲区。
find ./ -name '*.sh' | xargs ls -lh
xargs 会以空格、换行符或制表符来区别结果集
7、-print0 //在结果集的末尾添加null(\0)
find ./ -maxdepth 1 -type f -print0 | xargs -0 ls -lh
xargs -0 表示不以默认的空格、换行符或制表符来区别,而是换成null(\0)
防止有的文件名中带空格,会识别错误 如类似touch test\ teet1 (转义空格)
exec不会出现这种问题。
8、//按修改时间来查找文件
-atime //access 访问时间 按天
-amin 按分钟
-mtime //modify 文件内容修改时间
find ./ -name "syslong.*.gz" -mtime +5 -exec ls -lh {} \; +5表示5天前的文件
find ./ -name "syslong.*.gz" -mtime -5 -exec ls -lh {} \; -5表示5天内的文件
-mmin
-ctime // 文件的属性修改时间
-cmin
linux日志文件存放在 /var/log/syslog目录下
Find命令格式:
find [-H] [-L] [-P] [-D debugopts] [-O level] [path...] [expression]
find命令选项:
-name:使用文件名查找,支持使用通配符
-iname:使用文件名查找,不区分大小写。
-perm:使用文件权限查找
/+权限:匹配任何一类(u,g,o)的权限,符合"权限"内容就输出。
-+权限:u、g、o中只要有一个为"权限"内容,u、g、o都要匹配为"权限"的内容
-user和nouser:查找文件属于u的文件和查找没有属主的文件
-group和-nogroup: 查找文件属于g的文件和查找没有属组的文件
-uid和-gid:查找文件的uid为指定uid的文件和查找文件的gid为指定gid的文件
-type:根据文件类型来查找文件
f:普通文件
d:目录
l:符号连接文件
b:块设备文件
c:字符设备文件
p:命名管道文件
s:套接字文件
-regex:匹配整个文件路径字符串
-size:以文件大小来查找
-atime、-mtime和-ctime:根据时间来查找文件(以天为单位)
-amin、-mmin和-cmin:根据时间来查找文件(以分钟为单位)
-print:默认处理动作
-ls:对查找到的每个文件做"ls -l"动作
-delete:删除查找到的文件
-fls:后面指定一个路径,表示把查找到的内容保存到所指定的路径中
-ok:后面跟指令,表示执行指令对所查到的文件之前需要用户确认
-exec:后面跟指令,表示执行指令对所查到的文件之前无需用户确认
-a:组合查找条件的"与"
-o:组合查找条件的"或"
-not或者!: 组合查找条件的"非"(组合查找条件中优先级为"非"先于"与"先于"或",提升优先级可用())
例子:查找/var目录属主为root,且属组为mail的所有文件;
2、查找/usr目录下不属于root、bin或hadoop的所有文件;
查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;
查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
查找/etc目录下大于20k且类型为普通谁的的所有文件;
查找/etc目录下所有用户都没有写权限的文件;
查找/etc目录下至少有一类用户没有执行权限的文件;
查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/5627.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
打赏微信支付宝扫一扫,打赏作者吧~
休息一下~~