8.linux四剑客之find

2021-05-18 分类:Linux基础, shell编程 阅读(291) 评论(0)

孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。

1.find查找应用场景

1.忘记文件的路径;
2.记得文件内容,但不知道是哪个文件;

find 命令的基本语法如下

命令-->路径-->选项-->表达式-->动作

2.find查找示例

以下列出所有find常用的选项

1.基于类型;f d s c b l

# f 文件
[root@web01 ~]# find /dev -type f
# d 目录
[root@web01 ~]# find /dev -type d
# l 链接
[root@web01 ~]# find /dev -type l
# b 块设备
[root@web01 ~]# find /dev -type b
# c 字符设备
[root@web01 ~]# find /dev -type c
# s 套接字
[root@web01 ~]# find /dev -type s
# p 管道文件
[root@web01 ~]# find /dev -type p

2.基于名称

#1.查找/etc目录下包含ifcfg-eth0名称的文件
[root@web01 ~]# find /etc -name "ifcfg-eth1"
#2.-i 忽略大小写
[root@web01 ~]# find /etc -iname "ifcfg-eth1"
#查找/etc目录下包含ifcfg-eth名称所有文件
[root@web01 ~]# find /etc/ -name "ifcfg-eth*"
[root@web01 ~]# find /etc -iname "ifcfg-eth*"

3.基于大小

#1.查找大于5M的文件
[root@web01 ~]# find /etc -size +5M
#2.查找等于5M的文件
[root@web01 ~]# find /etc -size 5M
#3.查找小于5M的文件
[root@web01 ~]# find /etc -size -5M 

4.find时间查找

#1.创建测试文件
[root@web01 ~]# for i in {01..28};do date -s  202104$i && touch file-$i;done
#2.查找7天以前的文件(不会打印当天的文件)
[root@web01 ~]# find ./ -iname "file-*" -mtime +7
#3.查找最近7天的文件,不建议使用(会打印当天的文件)
[root@web01 ~]# find ./ -iname "file-*" -mtime -7
#4.查找第7天文件(不会打印当天的文件)
[root@web01 ~]# find ./ -iname "file-*" -mtime 7
#5.本地文件保留最近7天的备份文件, 备份服务器保留3个月的备份文件(实际使用方案)
find /backup/ -iname "*.bak" -mtime +7 -delete
find /backup/ -iname "*.bak" -mtime +90 -delete

5.基于用户查找

#查找属主是jack
[root@web01 ~]# find /home -user jack
#查找属组是admin
[root@web01 ~]# find /home -group admin
#查找属主是jack, 属组是admin
[root@web01 ~]# find /home -user jack -group admin
#查找属主是jack, 并且属组是admin
[root@web01 ~]# find /home -user jack -a -group admin
#查找属主是jack, 或者属组是admin
[root@web01 ~]# find /home -user jack -o -group admin
#查找没有属主
[root@web01 ~]# find /home -nouser
#查找没有属组
[root@web01 ~]# find /home -nogroup
#查找没有属主或属组
[root@web01 ~]# find /home -nouser -o -nogroup

6.find动作处理,比如查找到一个文件后,需要对文件进行如何处理, find的默认动作是 -print

-ok: 提示
-exec: 逐个执行;   使用xargs 替代; 将所有的结果打包一起直接作为参数传递;
-print: 默认;
-ls:   可以使用xargs ls -l 替代

复制;
[root@web01 ~]# find -type f -name "file*" -mtime +20 -exec cp -rv {} /tmp \;

结合xargs复制;
[root@web01 ~]# find -type f -name "file*" -mtime +15 | xargs cp -rvt /tmp/
删除;
[root@web01 ~]# touch {1..10000}	
[root@web01 ~]# time find ./ -type f ! -name ".bash*" -exec rm -f {} \;

[root@web01 ~]# time find ./ -type f ! -name ".bash*" | xargs rm -f 

过滤;
[root@web01 ~]# find ./ -type f | xargs grep "web01" --color
./6:	web01
find结合sed实现批量修改文件名称:
touch file-{1..10}
find ./ -type f -name "file*" | sed -r 's#(.*)-(.*)# mv \1-\2 test-\2#g' |bash

7.find逻辑运算符

符号作用
-a
-o
-not|!
#1.查找当前目录下,属主不是hdfs的所有文件
[root@web01 ~]# find . -not -user hdfs 
[root@web01 ~]# find . ! -user hdfs
        
#2.查找当前目录下,属主属于hdfs,且大小大于300字节的文件
[root@web01 ~]# find . -type f -a -user hdfs -a -size +300c
            
#3.查找当前目录下的属主为hdfs或者以xml结尾的普通文件
[root@web01 ~]# find . -type f -a \( -user hdfs -o -name '*.xml' \)
#4.查找当前目录下名字以file结尾或以check结尾并删除,但是排除以1.file或以1.check结尾的文件
find . -type f \( -name '*.file' -o -name '*.check' \) ! \( -name "*1.file" -o -name "*1.check" \) -exec rm -vf {}  \; 
欢迎新朋友你的到来!
还没有人抢沙发呢~
昵称
邮箱
网站

登录

忘记密码 ?

切换登录

注册

鲁ICP备2021019243号-1