背景:find命令十分的好用,特别是在查找文件的时候,这个时候需要和文件通配符一起使用。

1 前言

我们为什么要学会使用find命令?

每一种操作系统都有成千上万的文件组成,对于linux这样“一切皆文件”的操作系统来说更不例外,大家应该都能很轻松使用windows下的文件查找功能,但是对linux这一功能可能并不是很熟悉。

其实想玩linux的你更要牢牢掌握这个命令,因为linux不像windows那样有固定的文件名后缀,并且因为linux阵营下百家争鸣的特性,一个相同的文件在不同的发行版,可能会有不同,所以如果你能牢牢掌握find命令的使用,你在摸索linux的道路上将会顺利很多,同时你会发现linux下文件查找功能其实很简单,而且要比windows下查找功能强大很多很多!好,下面进入正题

2 find介绍

Linux下查找文件的命令有两个:locate 和 find

首先说下locate,locate这个命令是对其生成的数据库进行遍历(生成数据库的命令:updatedb),这一特性决定了用locate查找文件速度很快,但是locate命令只能对文件进行模糊匹配,在精确度上来说差了点,简单介绍下它的两个选项:

  #locate 

        -i        //查找文件的时候不区分大小写 比如:locate  –i   passwd

       -n       //只显示查找结果的前N行     比如:locate  -n  5   passwd

下面重点说下find,find在不指定查找目录的情况下是对整个系统进行遍历查找

2.1 语法

使用格式 :

 find  [指定查找目录]  [查找规则]  [查找完后执行的action]

[指定查找目录]例如:

ps:这里要注意的是目录之间要用空格分开

2.2 查找规则

[查找规则]

(1)根据文件名查找

 #  -name       //根据文件名查找(精确查找)

 #  -iname       //根据文件名查找,但是不区分大小写 

这里另外介绍下文件名通配符的知识

*表示  通配任意的字符

?表示  通配任意的单个字符

[ ] 表示 通配括号里面的任意一个字符

(2)根据文件所属用户和组来查找文件

#  -user         //根据属主来查找文件

 #  -group        //根据属组来查找文件

(3)根据uid 和 gid来查找用户

 #find  /tmp  -uid  500  //查找uid是500 的文件

 #find  /tmp  -gid  1000 // 查找gid是1000的文件

(4)-a  and  -o  and  –not的使用

ps:有用

# -a 连接两个不同的条件(两个条件必须同时满足)

# -o 连接两个不同的条件(两个条件满足其一即可)

# -not 对条件取反的

(5)根据文件时间戳的相关属性来查找文件

我们可以使用stat命令来查看一个文件的时间信息 如下:

           #-atime

           #-mtime

           #-ctime

           #-amin

           #-mmin

           #-cmin

所以这里atime,mtime,ctime就是分别对应的“最近一次访问时间”“最近一次内容修改时间”“最近一次属性修改时间”,这里的atime的单位指的是“天”,amin的单位是分钟  

 

#find  /tmp  –atime  +5           //表示查找在五天内没有访问过的文件(也就是5天前天没访问的文件)

#find  /tmp  -atime  -5            //表示查找在五天内访问过的文件

ps:在清理日志的时候,一般使用的是——最近一次内容修改的时间

find -mtime +30 -name "*[0-9]*" -exec rm {} \;

(6)根据文件类型来查找文件

          -type

                      f     // 普通文件

                      d     //目录文件

                      l     //链接文件

                      b     //块设备文件

                      c     //字符设备文件

                      p     //管道文件

                      s     //socket文件                

(7)根据大小来查找文件

-size

#find  /tmp  -size   2M           //查找在/tmp 目录下等于2M的文件

#find  /tmp  -size  +2M           //查找在/tmp 目录下大于2M的文件

#find  /tmp  -size  -2M           //查找在/tmp 目录下小于2M的文件

(8)根据文件权限查找文件

-perm

#find  /tmp  -perm  755           //查找在/tmp目录下权限是755的文件

#find  /tmp  -perm  +222          //表示只要有一类用户(属主,属组,其他)的匹配写权限就行

#find  /tmp  -perm  -222          //表示必须所有类别用户都满足有写权限

(9)-nouser  and  -nogroup

#find  /  -nogroup –a –nouser       //在整个系统中查找既没有属主又没有属组的文件(这样的文件通常是很危险的,作为系统工程师的我们应该及时清除掉)

2.3 [查找完执行的action]

         # -print                                 //默认情况下的动作

         # -ls                                     //查找到后用ls 显示出来

         # -ok  [commend]                //查找后执行命令的时候询问用户是否要执行

        # -exec [commend]              //查找后执行命令的时候不询问用户,直接执行

这里要注意{}的使用:替代查找到的文件

#删除查找到的超过30天没有访问过文件
find /tmp -atime +30 –exec rm –rf {} \;

我们也可以使用xargs来对查找到的文件进一步操作


………………………………………………………………………………………ok!     以上就是关于find的使用方法,排版有点失败,主要是字体调粗后无法调细了,悲催……但是希望各位读者看完这边博客后能有所收获…

 3 补充知识

1.删除文件命令:

find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;

实例命令:

find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;

说明:

将/opt/soft/log/目录下所有30天前带".log"的文件删除。具体参数说明如下:

find:linux的查找命令,用户查找指定条件的文件;

/opt/soft/log/:想要进行清理的任意目录;

-mtime:标准语句写法;

+30:查找30天前的文件,这里用数字代表天数;

"*.log":希望查找的数据类型,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件,这个可以灵活运用,举一反三;

-exec:固定写法;

rm -rf:强制删除文件,包括目录;

{} \; :固定写法,一对大括号+空格+\+;

 
 
 
 

最新文章

  1. OPENGL半透明图像产生黑色光环
  2. Myeclipse 加载ojdbc14.jar步骤
  3. Some useful links
  4. WPF控件模拟双击事件
  5. Castle IOC容器内幕故事(下)
  6. Memcached概述
  7. [UWP小白日记-1]判断APP是否是第一次运行初始化SQLITE数据库
  8. Java课程设计—学生成绩管理系统(54号童欢)
  9. 栈stack(2):栈的链表实现
  10. swust oj 971
  11. 【Spark-core学习之三】 Spark集群搭建 & spark-shell & Master HA
  12. tensorflow o. 到 tensorflow 1. 部分改变
  13. Windows 2016 无域故障转移群集部署方法 超详细图文教程 (一)
  14. MySQL存储引擎对比
  15. WICED SDK 3.3.1
  16. cygwin下安装c语言开发环境
  17. (文章转载)MCI编程
  18. go语言基础之全局变量
  19. java中线程安全问题
  20. mysql 安装(压缩包安装和exe安装)

热门文章

  1. JavaScript 函数闭包
  2. CTSC 2018酱油记
  3. Linux chmod命令用法
  4. Easyui datagrid 设置内容超过单元格宽度时自动换行显示
  5. Python Django对接企业微信第三方服务回调验证的一些坑
  6. Django 在Django项目里单独运行某个py文件
  7. SQL Server 数据库部分常用语句小结(二)
  8. c/c++ linux epoll系列1 创建epoll
  9. python3 正则表达式点星问号(.*?)能不能匹配换行符?不能的话应该怎么写
  10. socketServer并发处理socket