Linux下的find指令详解

在Linux下有很多查找指令:

  • locate

  • whereis

  • which

  • find

  在这些查找指令中功能最强大的当属find指令了。find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能很强大。即使系统中含有网络文件系统,find命令在该文件系统中同样有效。所以在本片博客中主要讨论find命令。


(一)find命令的格式:find 路径 -命令参数 [输出形式];

           路径:所要搜索的目录及其所有子目录。默认为当前目录。

    命令参数:要查找文件的特征。如果参数为空则返回当前目录及子目录下的所有文件wKiom1c5g2jwFZb6AABOLeZsEV4929.png

(二)find命令的常用参数:

  • 根据文件名或正则表达式匹配搜索:

    使用-name参数指定文件名必须匹配的字符串:(-name之前的.可加可不加)


    wKioL1c5hsTxdz6PAAA8YMH_SI0556.png

  • 具有条件限制的查找:

    -a  与条件

    -o  或条件

    -not 非条件(此参数的功能类似于否定参数‘!’)


    wKiom1c5iPnCGWs7AABIvIEeEHs686.png

    wKiom1c5i5ahciREAAAPOokDs9M507.png

[cpp]  view plain  copy
 print ?
  1. find -name "t*" -a -name "*.text"  //查找以t开头并且以.text结尾的文件  
  2. find -name "t*" -o -name "*.text"  //查找以t开头或以.text结尾的文件  
  3. find -not -name "t*" -o -name "*.text"  //查找不以t开头或以.text结尾的文件  

  -path  这个参数用于将整个路径作为一个整体进行匹配。

[cpp]  view plain  copy
 print ?
  1. find /home -path "*.c"  

wKioL1c5i8rxWITOAAAMzUAlWYM167.png

  • 设定find命令在子目录中遍历的深度参数:

    -maxdepth

    -mindepth


    wKioL1c5jl-izdGCAAANAEhXncQ804.png

[cpp]  view plain  copy
 print ?
  1. find -maxdepth 2 -type f  //列出两层深度之间的普通文件  
  • 根据文件类型搜索:

 文件类型   类型参数
 普通文件    f
 符号文件    l
 目录       d
 字符设备    c
 块设备     b
 套接字     s
 管道文件    p

wKiom1c5jxnSV2tJAAANLRtsf30706.png

[cpp]  view plain  copy
 print ?
  1. find -type l  //查找此目录及子目录以下的所有符号文件  
  2. find -type f  //普通文件  

 字符设备文件,块设备文件,套接字文件,管道文件可以到根目录下查找:(cd /)

wKiom1c5kPnQbBqcAABZ5xF3ZOA874.png

  • 根据文件时间进行查找:

    linux文件系统中的每个文件都有三种时间戳

     1. 访问时间(atime——access time):就是上次访问这个文件的时间。
     2. 改变时间(ctime——change time):就是文件的inode改变的时间(什么是inode?)当你往一个文件中添加数据或者删除数据的时候,修改文件所有者的时候,链接改变的时候,文件的ctime就会发生改变。
     3. 修改时间(mtime——modification time):就是文件的内容上一次发生改变的时候的时间。

  • [cpp]  view plain  copy
     print ?
    1. find -type f -atime -7   #查找7天内被访问的文件  
    2. find -type f -atime  7   #查找恰好在7天前被访问的文件  
    3. find -type f -atime +7   #查找超过7天没被访问的文件  

  -atime,-ctime,-mtime可作为find的时间参数,单位是天。还有基于“分钟”的,-amin,-mmin
 -cmin。这些值通常还带有+或-:+表示大于,-表示小于。


  -newer参数,我们可以指定一个用于比较时间戳的参考文件,然后找出比参考文件更新的所有文件。

wKioL1c5lMaSL-pFAAAhzkDry2g300.png

[cpp]  view plain  copy
 print ?
  1. find -type f -newer test4  //查找当前目录及子目录下比test4更新的文件  
  • 基于文件大小的查找

    -size参数


    wKiom1c5lPrRWvu9AAAdyGOvcSY055.png

[cpp]  view plain  copy
 print ?
  1. find -type f -size +45  //查找文件大小比45大的普通文件  
  2. find -type f -size  45  //查找文件大小为45的普通文件  
  3. find -type f -size -45  //查找文件大小比45小的普通文件  
  • 基于文件权限和文件所有人的查找

    -perm  按照文件权限查找

    -user (或者是-uid n   n是用户账号的ID) 按照文件所有人查找

    -group (或者是-gid n   n是组名的ID)按照文件的所属组查找


    wKiom1c5li6QDogwAAAQM_344_k290.png

    wKioL1c5l5qTheFYAAAUJPwAuuA667.png

[cpp]  view plain  copy
 print ?
  1. find -type f -perm 664   //查找权限为664的普通文件  
  2. find -type f -perm +664        //查找权限为大于664的普通文件  
  3. find -type f -user lee   //查找所有人为lee的普通文件  
  4. find -type f -uid 2   //查找所有人为账号ID为2的普通文件  
  • 结合find执行命令或动作

    -exec  find命令最强大的参数之一

[cpp]  view plain  copy
 print ?
  1. find -type f -name "*.c" -exec cat> file.txt \;  #将所有.c文件拼接起来写入单个文件file.txt中  
  2. find -type f -mtime +10 -name "*.text" -exec cp /5_15   #将10天前的.text文件复制到/tmp下  
  • find与xargs结合使用

  • xargs参数  将标准输入转换成命令行参数

wKioL1c5nAayxZZ-AAAMzgTaNJQ787.png

[cpp]  view plain  copy
 print ?
  1. find -type f -name "*.txt" -print0 |xargs  -0 rm -f   #将匹配到的文件删除,xargs -0将 \0作为输入定界符。  
  2. find -type f -name "*.c" -print0 | xargs  -0 -l     #统计所有c程序文件的行数  
  • 额外可进行的动作参数

    -exec参数  参数后面跟的命令就是所要进行的额外动作

    例如:

[cpp]  view plain  copy
 print ?
  1. find -type f /home -perm -1000 -exec ls -l{}\;   //找出文件权限小于1000的普通文件使用ls -l显示出来  

  -exec与“\;”之间的内容就是要进行的额外内容。

  {}就是将find找到的内容放到{}中去。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值