Linux递归查找find命令不同类型文件的方法和举例
在linux系统中查找文件一般使用find命令,命令强大,使用灵活。命令的基本格式类似如下。
find <指定目录> <指定条件> <指定动作>
“指定目录”:默认为当前目录,默认递归查找。目录可以有多个,目录之间要用空格分开。
“指定条件”:条件比较多,下面具体举例。
“指定动作”:-print 默认动作打印,-ls 找到用使用ls显示,-exec 直接执行命令,-ok 询问是否执行
常见示例:查找文件名(忽略大小写)
find . -iname nbhao.java
博主总结几个常用的查找类型,类似如下:
[1]根据文件名查找
-name 按照文件名查找
-iname 根据文件名查找,但是不区分大小写
-prune 不在当前指定的目录中查找
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找
[2]根据文件所属用户和组来查找文件
-user 按照文件属主来查找文件
$find / -user fred //查找在系统中属于FRED这个用户的文件
-group 按照文件所属的组来查找文件
$find / -group cat //查找在系统中属于group组名cat的文件
[3]根据uid 和 gid来查找用户
-uid
#find /tmp -uid 500 //查找uid是500 的文件
-gid
#find /tmp -gid 1000 // 查找gid是1000的文件
[4]-a,-o,-not的使用
-a 连接两个不同的条件(两个条件必须同时满足)
#find /tmp -name "*.sh" -a -user root
-o 连接两个不同的条件(两个条件满足其一即可)
#find /tmp -name "*.sh" -o -user root
-not 对条件取反的
#find /tmp -not -user root
[5]根据文件时间戳的相关属性来查找文件
-atime 最近一次访问时间 单位:天
-mtime 最近一次内容修改时间 单位:天
-ctime 最近一次属性修改时间 单位:天
-amin 最近一次访问时间 单位:分钟
-mmin 最近一次内容修改时间 单位:分钟
-cmin 最近一次属性修改时间 单位:分钟
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件
-
#find /tmp -atime +5 //表示查找在五天内没有访问过的文件
-
#find /tmp -atime -5 //表示查找在五天内访问过的文件
[6]根据文件类型来查找文件
-type 查找某一类型的文件
文件类型:
f 普通文件
d 目录
l 符号链接文件
c 字符设备文件
p 管道文件
b 块设备文件
s socket文件
#find /tmp -type s
[7]根据大小来查找文件
-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计
-
#find /tmp -size 2M //查找在/tmp 目录下等于2M的文件
-
#find /tmp -size +2M //查找在/tmp 目录下大于2M的文件
-
#find /tmp -size -2M //查找在/tmp 目录下小于2M的文件
#find . -size +1000000c //在当前目录下查找文件长度大于1 M字节的文件 #find / -empty //查找在系统中为空的文件或者文件夹
[8]根据文件权限查找文件
-perm
-
#find /tmp -perm 755 //查找在/tmp目录下权限是755的文件
-
#find /tmp -perm +222 //表示只要有一类用户(属主,属组,其他)的匹配写权限就行
-
#find /tmp -perm -222 //表示必须所有类别用户都满足有写权限
[9]-nouser和-nogroup
-nogroup 查找无有效所属组的文件,即该文件所属的组不存在
-nouser 查找无有效属主的文件
#find / -nogroup -a -nouser //在整个系统中查找既没有属主又没有属组的文件(这样的文件通常是很危险的,作为系统工程师的我们应该及时清除掉) #find / -nouser //查找在系统中属于作废用户的文件
[10]删除查找到的超过30天没有访问过文件
-ok和-exec命令将命令行上后续的参数作为他们参数的一部分,直到被\;序列终止。魔术字符串{}是-ok和-exec命令的一个特殊类型的参数,它将被当前文件的完整路径取代。
#find /tmp -atime +30 –exec rm –rf {} \;