微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux文件查找实现

文件查找

  1. locate:非实时查找(依赖数据库的方式)
  2. find(实时查找)

locate:-- 模糊搜索(不适合经常改变的文件

  1. locate 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db
  2. 索引的构建是在系统较为空闲时自动进行(周期性任务),执行updatedb可以更新数据库
  3. 索引构建过程需要遍历整个根文件系统,很消耗资源

特点:

速度很快、模糊查找、非实时查找、搜索的是文件的全路径

选项:

-i: 不区分大小写
-r: 使用基本正则

范例:

#搜索名称或路径中包含“conf”的文件
locate conf
#使用Regex来搜索以“.conf”结尾的文件
locate -r '\.conf$'

find:通过遍历指定路径来查找文件(实时搜索

特点:

速度慢、实时查找、精确查找

格式:

find [选项] [查找路径] [搜索条件] [处理动作]

  1. 查找路径:指定具体目标路径;认为当前目录(认是递归行为)
  2. 查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;认为找出指定路径下的所有文件
  3. 处理动作:对符合条件的文件做操作,输出至屏幕

选项:

文件查找:

  1. 根据文件名查找: - name
  2. 根据文件所有者查找: -user
  3. 根据文件类型查找: -type
  4. 根据文件权限查找: -perm

1.根据文件查找文件

范例:

find -name sNow.png -- 查找当前目录下文件名为show.png的文件
find -iname sNow.png -- 查找的时候不区分大小写
find / -name  ".txt" -- 查找根目录下

2.根据文件所有者或所有组查找

-user USERNAME #查找属主为指定用户(UID)的文件
-group GrpnAME #查找属组为指定组(GID)的文件

3.根据文件类型查找

-type TYPE
TYPE可以是以下形式:
f: 普通文件
d: 目录文件
l: 符号链接文件
s:套接文件
b: 块设备文件
c: 字符设备文件
p: 管道文件

范例:#查看/home的目录

find /home –type d -ls

根据文件大小来查找

-size +或- file_size 单位:k M G

4.根据权限查找

  • -perm(permission) [/|-]MODE
  • MODE  #精确权限匹配
  • /MODE #任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系.
  • -MODE #每一类对象都必须同时拥有指定权限,与关系
    0 表示不关注
    比如: -600或/600 表示所属组和其他人的权限不管人,只关心非0的部分。

范例:

  • find -perm 600 filename ---精确匹配权限
  • find -perm /600 finename --- 表示所有者的权限是读(r -- 4)或写(w -- 2)都可以(0表示不关心
  • find -perm -600 finename --- 表示所有者权限是(r和w)(所属组和其他的权限不关心)

组合条件

  • 与:-a ,and,认多个条件是与关系
  • 或:-o ,or
  • 非:-not   !

处理动作:找到文件后执行的操作

-print:认动作,输出到屏幕
-ls:类似于执行ls -dils命令
-exec COMMAND {} ; -- 对查找到的文件执行COMMAND命令
{}: 占位符,用于表示查找到的文件名称

参数替换:xargs

  • xargs本身认是读取键盘的输入,然后将他显示到屏幕。(这个功能类似于cat)

例如:(输入完成后按回车,然后ctrl+d退出

image

  • xargs可以接受键盘的标准输入,把键盘输入的结果通过xaegs传递后续的命令,作为后续命令的参数。(以空格、回车将数据分隔为参数)

例如:

image

删除当前目录下的大量文件

ls | xargs   rm(使用ls显示文件名,然后xargs将它作为传递给rm命令)

范例:

例如:不换行显示十个数字 seq 10 | xargs(多行合成一行)

image

xargs选项:

  • -n1:传递一个就单独一行
  • -n2:两个作为一个整体来处理

    image

范例:批量创建用户

echo user{1..10} | xargs -n1 useradd

和find命令组合使用: find | xargs COMMAND
例如:#查找有特殊权限的文件,并排序
find /bin/ -perm /7000 | xargs ls -Sl -- 找到含有特殊权限的文件以后进行从大到小的顺序排序。
例如:#以字符nul分隔(认xargs以空格作为切割文件的分隔符)
find -type f -name "*.txt” -print0 | xargs -0 rm
-print0:用ascii的0作为切文件的分隔符
-0: xargs以0作为分隔符进行切割

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐