zoukankan      html  css  js  c++  java
  • linux常用命令指南——查找文件我最强:find

    2.3.2 查找文件我最强:find
    2.3.2.1 find查找常用命令示例
    find / -name 'wfy.txt'
    # 从根目录下开始查找文件wfy.txt
    
    find . -name '*fy.txt'
    # 当前目录下,查找fy.txt后缀的文件
    # “.”表示当前目录,"*"表示任意长度字符
    
    find / -type f -size +500M
    # 从根目录开始查找,500M以上文件
    # / :根目录
    # . : 当前目录
    # -type f: f为普通文件类型,f改为d则是目录文件,l则是符号链接文件,-type 还有其他参数,不在这里一一列举
    # -size +500M :500MB以上 
    # 一般磁盘空间不够,删除垃圾文件时会使用到此命令
    
    find . -type f -size +1k
    # 查找当前文件夹下超过1k的文件,注意k是小写。
    
    find . -type f -mtime -30
    # 查找当前目录下30天之内修改过的文件
    # -mtime:代表修改时间,最常用,类似参数有-atime、-ctime
    # -atime:代表访问时间,查看过就算
    # -ctime:文件状态改变时间
    # -30:代表30天以内,30为n,数字自己填写
    # +30:30天以前
    # 30:距今第30天
    
    find /var/log/ -mtime +30 -name '*.log'
    # 查找指定目录/var/log/ 下30天以前的log文件
    
    find /etc ! -type f  
    # 查找 /etc 目录下不是普通文件的 文件
    # "!":感叹号,取反
    
    find /etc ! -type l -mtime -30
    # 查找/etc 目录下不是符号链接文件,并在30天内被修改过的文件
     
    find /etc -maxdepth 1 ! -type l -mtime -30
    # 查找/etc 第一层目录下不是符号链接文件的文件,并在30天内被修改过
    # -maxdepth : 前面du学过,指定目录层级,-maxdepth 1代表第1层,-maxdepth 2代表延伸到第二层
    

    -maxdepth 可能有点不好理解,所以截了个示例图

    mark

    2.3.2.2 使用find 组合命令:统计与删除

    基本常用的find命令都已经讲完了,再说下运维中可能常用的一个组合命令,利用find删除N天以前的文件或日志。

    先用wc -l来统计下log数量,再删除看看

    find / -name '*.log' -mtime +300 | wc -l
    # 从根目录下开始搜索300天之前的log文件,并统计数量
    # “|”:管道符,将前面查到的数据作为输入源给后面的命令
    

    mark

    第一种删除方式:-exec

    find / -name '*.log' -mtime +300 -exec rm {} ;
    # 查找30天以前的log文件,使用-exec加rm将其删除
    # 再使用上面的命令重新查看一次
    find / -name '*.log' -mtime +300 | wc -l 
    


    mark

    第二种删除方式:-ok

    find / -name '*.log' -mtime +200 -ok rm {} ;
    # -ok : 询问删除,y删除,n不删除,回车默认不删除
    

    mark
    mark

    第三种删除方式:xargs

    依次执行查看结果

    find / -name '*.log' -mtime +100 | wc -l
    
    find / -name '*.log' -mtime +100 | xargs rm -f
    # xargs : 命令传递参数过滤器,与管道符“|”一同使用,将前面的命令传递给后面的命令使用
    
    find / -name '*.log' -mtime +100 | wc -l
    

    mark

    2.3.2.3 find与xargs的组合使用

    对于50天前的log文件进行详情查看

    find / -name '*.log' -mtime +50 | xargs ls -l
    # 利用xargs + ls -l 命令来进行文件的详细属性查看
    

    mark

    移除50天前的文件

    mkdir /logback
    # 创建根目录下的 /logback文件夹
    
    find / -name '*.log' -mtime +50 | xargs -i mv {} /logback
    # 将50天前的所有log文件移动到 /logback 文件夹下
    # xargs -i + {},将前面查找到的文件都作为参数给mv命令执行
    
    ls -l /logback
    # 查看 /logback 下所有文件详情
    

    mark

    2.3.2.4 find下xargs与exec的区别

    区别一:

    -exec,是将查找到的结果文件名逐个传递给后面的命令执行,文件多会导致效率低;

    xargs,则是一次性传递,效率较高,并可使用-n参数控制传递文件个数。

    区别二:

    -exec,文件名有空格等特殊字符也照常处理;

    xargs,处理特殊的文件名(例如文件名有空格)需要采用特殊的处理方式(find . -name "*edu" -pringt0| xargs -0 ls -l)

    验证区别一,示例如下:

     find /logback -name '*.log'  -exec echo yaomaomao {} ;
    
    
    find /logback -name '*.log'  | xargs echo yaomaomao 
    

    mark

    可以看到使用-exec每次获得一个文件输出一次,xargs则只输出了一行。

    xargs还可以用-n参数控制每次输出的文件个数

    find /logback -name '*.log'  | xargs -n5 echo yaomaomao 
    

    mark

    可以看到,每行输出5个参数(文件名),不足的行输出剩下的。

    验证区别二,示例如下:

    touch yaomaomao.txt;touch "yaomaomao centOS 7";ll yaomaomao*
    # 小技巧:使用“;”分号可以一次性执行多个命令
    # 注意:查看和创建带有空格的文件时,使用引号括起来
    

    mark

    		find . -name "yaomaomao*" -exec ls -lh {} ;
    		# 正常查找出来
    
    		find . -name  "yaomaomao*" | xargs ls -lh
    		# 可以看到使用此命令报找不到那个文件或目录
    
    		find . -name  "yaomaomao*" -print0 | xargs -0  ls -lh
    		# 正常查找
    

    mark

    其实find还有很多强大的功能,截两张图大家就知道了
    find1
    find2

    这本书就是我开头推荐的《核心系统命令实战》。

    公众号注册的比较晚,没有评论功能,所以一般用来发长文。
    知识星球相当于技术朋友圈,有问题大家可以提问,讨论。

    欢迎关注我的公众号:姚毛毛的博客
    公众号

    欢迎加入我的知识星球,目前免费哦。
    知识星球:姚毛毛的私密花园

    公众号注册的比较晚,没有评论功能,所以一般用来发长文。
    知识星球相当于技术朋友圈,有问题大家可以提问,讨论。

    欢迎关注我的公众号:姚毛毛的博客
    公众号

    欢迎加入我的知识星球,目前免费哦。
    知识星球:姚毛毛的私密花园
    ![知识星球]mark

  • 相关阅读:
    用户自定义控件
    sql 动态行转列
    sql 将表B中不存在表A的数据 插入到表A中
    C#获取键盘和鼠标操作的时间的类
    滚动条加粗和panel,gridControl结合用
    第三项任务——用例建模
    第二项任务——项目需求分析
    第一项任务:团队组建及项目启动
    实验报告(结对项目)
    实验报告(个人项目)
  • 原文地址:https://www.cnblogs.com/yaomaomao/p/11556130.html
Copyright © 2011-2022 走看看