• Linux find命令


    介绍

    find命令是Linux中最主要的几个命令之一,可以用来查找文件和对查找出来文件执行特定的操作,是使用非常频繁的一个命令,接下来就来看看它的主要的一些用法。

    语法

    find  <目录列表>  <检索方式>  [<执行动作>]

    目录列表

    目录列表是find检索的目录,目录可以随便指定,可以指定多个目录用空格隔开,当前目录可以用“.”,如果要遍历指定目录的子目录可以使用-P选项,在centos中find命令默认是会遍历子目录的

    检索方式

    1)根据文件名称进行检索,也是最常用的检索方式,

     -name <文件名称> 例如:

    find /dev -name "vcsa*"

    -iname <文件名称>:不文件名称的大小写

    注意:文件名称可以使用通配符进行查询,文件名称使用双引号

    2)根据文件类型进行检索,可以单独使用也可以放在-name 之后使用,这里的文件类型其实就是文件的权限的第一个字符。

    -type <文件类型>

    • f:一般文件
    • d:目录文件
    • c:字符设备文件
    • b:块设备文件
    • p:管道文件
    • l:符号链接
    • s:套接字

    例如:

    find /dev -name "vcsa*" -type c

    3)根据时间进行检索

    • 访问时间(-atime(24小时),-amin(分钟)):用户最近一次访问时间。
    • 修改时间(-mtime(24小时),-mmin(分钟)):文件最后一次修改时间。
    • 变化时间(-ctime(24小时),-cmin(分钟)):文件数据元(例如权限等)最后一次修改时间。
    • -newer  <文件名称>:查询

      修改时间比<文件名称>所指定文件更加新的文件

    对于文件的这三个时间可以使用stat命令进行查询:

    Access:atime,对一个文件进行读操作会修改这个时间,比如cat、more、less。ls、stat命令都不会修改文件的访问时间。

    Modify:mtime,对文件进行修改修改操作会更新这个时间,比如vim操作,这个时间也是默认的文件显示时间。

    Change:ctime,对修改文件属性会更新这时间,比如chmod,chown操作

    注意:

    -mtime -1:一天内修改过的文件;比如当前时间是2016-05-09 20:00:00,那么-mtime -1只能查询到修改时间为[2016-05-08 20:00:01-2016-05-09 20:00:00]的文件。

    -mtime 1:修改时间早于用当前时间-24小时之前的24小时文件,比如当前时间是2016-05-09 20:00:00,那么-mtime 1只能查询到修改时间为[2016-05-07 20:00:00-2016-05-08 20:00:00]的文件。

    -mtime +1:一天前修改过的文件;比如当前时间是2016-05-09 20:00:00,那么-mtime +1只能查询到修改时间为2016-05-07 19:59:59之前的文件。

    其实mtime的这三个参数正好包括小于等于当前时间的所有时间值。

     例:查询以2016开头且修改时间正好是1天前的文件目录

    find . -name "2016*" -type d -mtime 1

    4)根据文件大小进行检索

    -size <文件大小>:默认的单位是K,也可以指定以下单位,还可以在文件大小前面使用+-符合分别代表大于或小于当前大小的文件,默认是等于

    b : 块(512Byte)

    c :Byte

    w : 字(2Byte)

    k :KB

    M :MB

    G :GB

    例如:

    1.在当前目录查询以2016开头大小等于4096字节的目录。

    find . -name "2016*"  -type d -size 4096c

    2.在当前目录查询以2016开头大小大于4096字节的目录。

    find . -name "2016*"  -type d -size +4096c

    3.在当前目录查询以2016开头大小小于于4096字节的目录。

    find . -name "2016*"  -type d -size -4096c

    -empty:查询文件大小为0byte的文件或者文件目录下面是空的目录

    find . -type d -size +4000c -empty

    注意:检索方式中涉及的检索访问都可以单独使用,也可以组合一起使用。

    以上的<检索方式>还可以通过逻辑运算进行组合。这些逻辑运算包括:

    • 与:即.and.操作,无须特别算符表达,只须将检索方式全部列出,中间用空格分开即可。
    • 或:即.or.操作,用算符-o表示,当两个检索条件是“或”关系时,将“-o”放在两个检索条件之间。
    • 否:即.not.操作,用算符!表示。

    可以使用()将一些条件作为一个组合,但是()需要用转义符“”将其写为“(”和“)”。

    例如:查询不是以2016或者name开头的目录

    find . ! ( -name "2016*" -o -name "name*" ) -type d

    5)其它的一些检索条件:

    -link  <数目>:根据文件的连接数进行检索
    -uid <拥有者用户id>:根据文件所属用户id进行检索
    -user <拥有者账号名称>:根据文件的拥有者进行检索
    -gid <组id>:根据文件所属组id进行检索
    -group <组名称>:根据文件所属组名进行检索
    -fstype <文件系统类型>:根据文件系统类型进行检索
    -maxdepth<目录层级>:设置最大目录层级,默认find是一直往下遍历,如果只需要在当前目录进行查找,可以使用-maxdepth 1
    -mindepth<目录层级>:设置最小目录层级
    -perm:根据文件的权限进行检索,比如755

    执行动作

    -printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
    -exec  <命令>  ;:如果命令中要使用检索出的文件名称的话,{}符号接收find查找出来的文件,注意一定不要漏掉了“;”

    例如:

    1.将查找出来的空文件进行删除

    find . -empty -type f -exec rm {} ;

    2.将2016开头的目录和子文件权限修改为750

    find . -name "2016*" -type d -exec chmod -R 750 {} ;

    3.结合grep 使用,查找文件aaa以a开头的行的数量

    find . -name "aaa" -exec grep '^a' {} ; |wc -l

    4.拷贝,将find查找到的文件拷贝到/test目录

    find . -maxdepth 1 -name "var*" -exec cp {} /test/ ; 

    注意:-exec后面无法接多个命令,但是可以执行脚本,比如 -exec ./scriptname

    使用正则表达式进行匹配

     -name默认是支持通配符的匹配方式,如果要使用正则表达式的的方式进行匹配查找则需要使用:

    -regex:

    -iregex:忽略大小写

    注意:find命令的参数也是根据先后顺序进行执行的,所以有的参数必须放在前面,比如查找的目录应该是在第一位,-maxdepth<目录层级>这个参数一般放在-name之前作为第二个参数,如果往后放会影响效率

    再比如有些参数-type应该放在 -name之后

    总结

    find中要对查找出来的文件执行操作基本上需要经过“-exec {} ;”    。其中wc -l操作除外。

    备注:

        作者:pursuer.chen

        博客:http://www.cnblogs.com/chenmh

    本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

    《欢迎交流讨论》

  • 相关阅读:
    android系统webview使用input实现选择文件并预览
    在列表中动态设置元素的id
    Vue使用Clipboard.JS在h5页面中复制内容
    Vue使用v-for显示列表时,数组里的item数据更新,视图中列表不同步更新的解决方法
    Vue子组件和根组件的关系
    Vue生命周期和钩子函数及使用keeplive缓存页面不重新加载
    Python与数据结构[3] -> 树/Tree[0] -> 二叉树及遍历二叉树的 Python 实现
    Python与数据结构[2] -> 队列/Queue[0] -> 数组队列的 Python 实现
    Python与数据结构[1] -> 栈/Stack[1] -> 中缀表达式与后缀表达式的转换和计算
    Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现
  • 原文地址:https://www.cnblogs.com/chenmh/p/5474423.html
Copyright © 2020-2023  润新知