zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Linux系列(12) - find

2023-02-18 16:27:19 时间

简述

find搜索文件,搜索方式丰富,遍历给定范围的所有目录下的文件(避免大范围的搜索,会非常浪费系统资源,建议不在直接在“/”目录下搜索)

命令格式

基本使用

格式:find 【搜索范围】【搜索条件】【文件名】;

例子:find /home -name [文件名];选项-name  根据文件名称查找;

注意:find搜索默认是完全匹配;

通配符

如果需要进行模糊查询,需要添加通配符,通配符有以下3种,使用通配符文件名必须用双引号“”引起来。跟文件名搜索条件【-name】【-iname】配合使用;

选项

  • “*”:匹配任意字符,例:find /home -name “*test*”,显示所有名字开头带test的文件;或例:find /home -name “*”,home目录下的所有文件,包括隐藏文件
  • “?”:匹配任意一个字符,
  • “[]”:匹配任意一个中括号内的字符,例:find /home -name “*test[12]”,显示test1和test2文件;或find /home -name “[12]*”,显示以1和2开头的文件。
  • 组合使用:例:find /home -name “*【12】”,显示所有1和2结尾的文件

例子:

  • find /root -name "findtest*":在root目录下搜索开头带findtest的所有文件
  • find /root -name "findtest?.test":在root目录下搜索文件名为“findtest【随便什么字符】.test”的所有文件
  • find /root -name "[12]test*":在root目录下搜索1或2开头,后面跟着test【后面不管有没有,不管是啥】的所有文件

find 按文件时间来搜索

选项

  • atime 文件访问时间
  • ctime 改变文件属性
  • mtime 修改文件内容

例子

  • find /home -mtime +2 :在home目录下,查找2天前修改的文件
  • find /home -mtime 2 :在home目录下,查找2天前当天修改的文件
  • find /home -mtime -2 :在home目录下,查找2天内修改的文件

find常用搜索条件

选项

-name:根据文件名查找,区分文件名大小写

-iname:不区分要搜索的文件名大小写格式

-user [用户名]:在搜索范围内查找属于[用户]的所有文件find /root -user root 搜索root目录下的所有属于root用户的文件

-nouser:搜索没有所属者的文件,liunx中,每个文件都有所属者,如果没有,那么一般都是垃圾文件,但还是有特例的,比如内核产生的文件,就没有所属者,一般在proc和sys目录下;还有外来文件,也就是U盘拷入的文件也会忽略所有者。

-size [文件大小][大小单位]:搜索什么单位下多大的文件;单位k用小写的,单位M用大写的;不带单位默认按扇区的计算方式算大小(自行百度)

例子

  • find /root -name 1test.test:搜索root目录下,文件名为1test.test的所有文件
  • find /root -iname 1TEST.TEST:搜索root目录下,文件名为1test.test的所有文件;文件名不区分大小写
  • find /root -user root:搜索root目录下的所有属于root用户的文件
  • find /root -nouser:搜索root目录下没有所属者的文件
  • find /root -size 4k:搜索root目录下文件大小等于4k的文件
  • find /root -size +2k:搜索root目录下文件大小,大于2k的文件
  • find /root -size -2k:搜索root目录下文件大小,小于2k的文件

 多个查询条件组合使用

选项

  • -a :表示and,与的关系
  • -o: 表示or,或的关系
  • -exec【另外外一个条件】 {} \:这个得用例子说明,比如:find /etc -size +20k -a -size -50k -exec rm -rf {} \?在/etc目录下搜索文件大小大于20k并且小于20k得文件,找到后删除这些文件; -exec {} \; 固定格式,表示前面的搜索结果放到-exec后面的命令里面执行;不是所有的命令-exec都可以执行,至少我发现mv不行;重要一点最后的;分号别忘了

例子

find /root -size -5k -a -name "1tes*":搜索root目录下文件大小小于5k并且文件名以“1test”开头的所有文件

find /root -size +5k -o -name "[12]test*":搜索root目录下文件大小大于5k或者文件名以“1”或者“2”开头,后面紧跟“test”的所有文件

find /root -size -5k -a -name "1test*" -exec rm -rf {} \;:搜索root目录下文件大小小于5k并且文件名以“1test”开头的所有文件,找到后删除这些文件