生信喵 发表于 2022-7-1 19:25:36

文件搜索

本帖最后由 生信喵 于 2022-7-1 19:37 编辑

一、locate
       locate 命令用于按照名称快速搜索文件所对应的位置,语法格式为“locate 文件名称”。使用 find 命令进行全盘搜索虽然更准确,但是效率有点低。如果仅仅是想找一些常见的且又知道大概名称的文件,不如试试 locate 命令。在使用 locate 命令时,先使用 updatedb 命令(需要 root 权限)生成一个索引库文件,这个库文件的名字是/var/lib/mlocate/mlocate.db,
       后续在使用 locate 命令搜索文件时就是在该库中进行查找操作,速度会快很多。
       第一次使用 locate 命令之前,记得先执行 updatedb 命令来生成索引数据库,然后再进行查找:
#更新 locate 数据库
updatedb
#显示 locate 数据库
ls -l /var/lib/mlocate/mlocate.db#查找文件名
locate SRX5299464
#使用正则表达式
locate -r "samtools[      DISCUZ_CODE_1      ]quot;
二、whereis 命令
       whereis 命令用于按照名称快速搜索二进制程序(命令)、源代码以及帮助文件所对应的位置,语法格式为“whereis 命令名称”。
       简单来说,whereis 命令也是基于 updatedb 命令所生成的索引库文件进行搜索,它与 locate命令的区别是不关心那些相同名称的文件,仅仅是快速找到对应的命令文件及其帮助文件所在的位置。
#whereis 搜索路径
whereis -l #查找程序文件
whereis less
whereis -b less
三、which 命令
       which 命令用于按照指定名称快速搜索二进制程序(命令)所对应的位置,语法格式为“which命令名称”。
       which 命令是在 PATH 变量所指定的路径中,按照指定条件搜索命令所在的路径。也就是说,如果我们既不关心同名文件(find 与 locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径。下面查找一下 locate 和 whereis 命令所对应的路径:
#查找软件
which locate

#显示全部内容
whereis locate
四、find
       find 命令用于按照指定条件来查找文件所对应的位置,语法格式为“find [查找范围] 寻找条件”。当系统中的文件很多时,忘记文件名和文件位置就可以使用 find 命令,find 命令提供了几乎全部条件的检索方式。例如根据文件大小,文件类型,文件日期等。例如想要找到一年之前超过 1G 的文件,然后删除掉,就可以使用 find 命令来完成。

参数 作用
-name 匹配名称
-perm 匹配权限(mode 为完全匹配,-mode 为包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间(-n 指 n 天以内,+n 指 n 天以前)
-atime -n +n 匹配访问文件的时间(-n 指 n 天以内,+n 指 n 天以前)
-ctime -n +n 匹配修改文件权限的时间(-n 指 n 天以内,+n 指 n 天以前)
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-newer f1 !f2 匹配比文件 f1 新但比 f2 旧的文件
-type b/d/c/p/l/f 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size 匹配文件的大小(+50KB 为查找超过 50KB 的文件,而-50KB 为查找小于 50KB 的文件)
-prune 忽略某个目录
-exec …… {}\; 后面可跟用于进一步处理搜索结果的命令(下文会有演示)
       find 命令中的参数以及作用
#1 搜索目录下以点 fna 结尾的文件;
find ~/ -name *.fna
#2 搜索系统中最近 5 分钟内编辑过的文件;
find / -amin 5       find 中可以根据各种时间选项进行搜索,以”天”为单位:有-atime [+|-],-mtime,-ctime以“分钟”为单位,包括-amin,-mmin,-cmin 下图中列出了有关时间的一些参数。
#3 查找大于100M的文件
find ./ -size 100M
查找到列出来
find ./ -size 100M -exec ls {} \;
查找到直接删除
find ./ -size 100M -exec rm -rf {} \;

#4 按照文件类型搜索;
find./ -type d ;文件类型 #c :档案,d: 目录,b: 区块装置档案 ,p: 具名贮列,f: 一般档案,l: 符号连结,s: socket

#5 查找完进行筛选
find /share/data/-name "*.sh" | grep "-.*"
查找到直接拷贝到当前目录
find /share/data/-name "*.sh" -xc cp {} ./ \;

#6 正则表达式筛选
find ~/ -name "*"      #查以大写字母开头的文件
find/etc -name"host*"   #查以host开头的文件
find~/ -name ".fa"#查以两个小写字母和两个数字开头的fa文件

#7 限制目录层次
find~ -maxdepth 4 -name *.fna   #查时深度最多为4层
find~ -mindepth 3 -name *.fna   #查时深度最少为3层

#8 搜索文件,直接处理
find . -type f -exec ls -l {} \; #一定要加分号

#9 查找并拷贝
mkdir fna
find~ -maxdepth 3 -name"*.fna" | xargs -I {}cp {} ./fna

#10 查找并删除
find ./fna -name *.fna
find ./fna -name *.fna -ok rm '{}' \;
find ./fna -name *.fna -exec rm '{}' \;

#搜索当前目录下所有一点fna结尾的文件,然后删除掉。
find ./fna-name *.fna | xargs rm
页: [1]
查看完整版本: 文件搜索