系统相关
首页 > 系统相关> > linux命令之find查找文件

linux命令之find查找文件

作者:互联网

find

find 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

语法

find  path  -option  [ -print ]   [ -exec   -ok   command ]   {} \;

上面的 find的常用形式可以简化为:

find [path...] [expression]

参数

expression 中可用选项非常之多

文件类型 说明
d 目录
c 字符设备
b 块设备
p 管道
f 普通文件
l 符号链接
s 套接字文件

实例

(1)根据文件名查找

-name //根据文件名查找(精确查找)
-iname //根据文件名查找,但是不区分大小写

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

*表示通配任意的字符

find /etc -name "*passwd"     

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

find /etc -name "passwd?"

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

find /etc -name "[ab].sh"

(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 对条件取反的

find /tmp -name "*.sh" -a -user root
find /tmp -not -user root

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

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

stat /etc/passwd

-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文件

find /tmp -type s

(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    //在整个系统中查找既没有属主又没有属组的文件(这样的文件通常是很危险的,作为系统工程师的我们应该及时清除掉)

查找完执行的action

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

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

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

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

find /tmp -name "*.sh" -exec chmod u+x {} \;

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

find /tmp "*.sh" -exec cp {} {}.old \;

删除查找到的超过30天没有访问过文件

find  /tmp  -atime  +30  –exec rm –rf  {}  \; 

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

find /tmp -name "*.old" | xargs chmod 700

案例详细说明

find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;
find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;

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

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

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

  3. -mtime:标准语句写法;

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

  5. "*.log":希望查找的文件名正则表达式,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件,这个可以灵活运用,举一反三;

  6. -exec:固定写法;

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

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

附录

每日一令之一

linux下find命令的总结

标签:tmp,文件,name,exec,查找文件,查找,linux,find
来源: https://www.cnblogs.com/happyhuangjinjin/p/15864741.html