day 17 find命令详解
find 的基本概述
可以根据文件的名称、文件大小、文件的修改时间、文件的类型、
文件的权限、文件的属主属组、文件的目录层级进行查找
Find的语法:
命令 路径 选项 表达式 动作
查找 地区 妹子 18-25 约
find中特殊符号说明:
. # 在find中没有特殊意思就是自己本身符号.
* # 所有
? # 匹配任意一个字符 只能匹配一个
[] # 匹配中括号中的任意一个字符
[^] # 排除中括号中的字符
一,name根据文件名称查找
选项:
-name # 根据名称查找
-i # 忽略大小写 -iname
实例:
[root@localhost ~]# find ./ -name 1.txt # 根据文件名在当前目录下查找1.txt
二,type根据文件类型查找
选项:
-type # 根据类型进行查找
f # 普通文件
d # 目录
l # 软链接
s # 套接字 socket文件
p # 管道文件
b # 块设备 硬盘 硬盘分区 镜像光盘
c # 字符设备
# 查找所有的普通文件,包括隐藏文件,也包括自己本身
实例:
# 查找当前目录下类型为普通文件的文件(包括隐藏文件也查找出来)
[root@localhost ~]# find ./ -type f
./file8
./.bash_logou
三,size根据文件的大小查找
选项:
-size # 根据文件大小查找
+n # 大于
-n # 小于
n # 精确匹配
c b k M G # 单位
# 按文件大小查找的时候 会进位匹配 比如按m查找的时候不足一兆的也算1兆
# 像1.1兆也算两兆 或者3.1算4兆 依次类推
实例:
# 匹配小于1k的文件
[root@localhost ~]# find ./ -type f -size -1k
./file8
./file9
四,mtime根据文件的时间查找
选项:
-mtime # 最后修改时间
+n # 多少天以前
-n # 多少天以内
n # 具体某一天
五,perm根据文件的权限查找
选项:
-perm # 根据权限查找
-421 # 包含这些权限
421 # 精确匹配
/421 # 包含其中的某个权限 三个身份中满足一个则匹配
! # 取反
实例:
# 查找/etc目录下所有用户都没有写权限的文件
find /etc/ -type f ! -perm /222 -ls
# /222表示三个身份中满足一个写权限则匹配
# 加!相反的意思就是只要有一个用户有写权限则不匹配(刚好满足题意)
# 此题有点绕 好好想想应该能理解出来
# 查找/etc目录下至少有一类用户没有写权限的文件
find /etc/ -type f ! -perm 222 # 222 表示精确匹配三个身份都要满足有写权限
# 取反的意思就是至少有一类用户没有写权限的文件就匹配
六,user group根据文件的属主属组查找
选项:
-user # 根据属主
-group # 根据属组选项:
-user # 根据属主
-group # 根据属组
-nouser # 没有属主
-nogroup # 没有属组
-nouser # 没有属主
-nogroup # 没有属组
实例:
# 在根下查找 属主是root 或者 属主是test 用户的文件 只要满足一个条件则匹配
find / \( -user root -o -user test \)
# -o或则要用()包起来跟其他选项区分 不加()有时候容易混淆
七 maxdepth根据文件的目录层级查找
选项:
-maxdepth # 最大的目录层级
实例:
# 在根目录下查找文件名字为'hostname'的文件最大的目录层级不能超过两层
find / -type f -maxdepth 2 -name 'hostname'
八,motion 根据动作来执行
动作(放在文件的最后):
-print # 默认的动作 打印你所查找出来的文件的名称
-ls # 把查找出来的文件以长格形式显示出来文件的详细信息
-delete # 把查找出来的文件进行删除 只能删除空目录
-exec # 后面加自定义的shell命令
实例:
# 在根目录下查找包含test昵称的文件名并删除
find / -type f -name '*test*' -exec rm -f {} \;
# -exec 找到的文件执行shell命令 {}表示前面匹配到条件的文件
# \;转义分隔符 表示命令的结束 不转移在-exec动作眼里表示shlle命令语句还没有写完
十,find跟xargs命令的配合
# finde 命令执行后的结果通过管道交给后面的命令执行需要用到xargs支持