find命令格式

参考 :
https://wangchujiang.com/linux-command/c/find.html
https://www.linuxcool.com/find

通过文件名搜索

# find 查找范围 查找参数
find / -name 文件名

-i 忽略文件名大小写

find / -iname Abc

在这里插入图片描述

忽略错误结果

# 忽略错误结果
find / -iname Abc 2>>/dev/null

-user按照文件的用户(文件所有人)查找

# 查找root的文件
find -user root

-size根据文件大小搜索

# 搜索大于100M的文件
find / -size +100M

# 搜索大于100M的文件并以列表形式展示
find / -size +100M | xargs ls -lh

-size组合条件

# 搜索大于30G小于3T的文件,并列出详情
find / -size +30G -size -3000G  2>>/dev/null | xargs ls -lh

在这里插入图片描述

-or搜索多个文件名

-or也可以简写为-o

# 使用-or来选择多个文件名
find . -name  "Test.class" -or -name "Test$"*

# 当前目录及子目录下查找所有以.txt和.pdf结尾的文件
## \是防止转义符
find . \( -name "*.txt" -o -name "*.pdf" \)

exec和xargs参数的区别

参考: https://www.linuxprobe.com/shell-xargs-exec.html

xargs参数—推荐

从标准输入流中获取参数,并基于它们执行命令

将前面的结果作为输出给后面去用

搜索包含某字符串的文件

# 搜索包含某字符串的文件
## grep -r 递归搜索
## grep -i 忽略大小写
find .|xargs grep -ri "要查找的字符串"

exec参数—不推荐

适用于执行带源带目的的动作

搜索所有的rpm包并将rpm包移动到某个目录

find ./ -name *rpm -exec mv {} . \;

练习

在这里插入图片描述

答案:

# 创建目录
mkdir /root/dfiles

# 查找文件并放入目录
find / -type f -user user3 -exec cp -a {} /root/dfiles \;

脚本

#!/bin/bash
find /usr -type f -perm /g=s -size +3M -size -5M -exec cp -a {} /root/dfiles \;
find /usr -type f -perm /u+s -size +30k -size -50k -exec cp -a {} /root/dfiles \;

locate搜索

locatefind的加强版,需要先在本地创建索引,搜索速度非常.

  • 缺点是依赖索引数据库,非实时查找,数据库每天更新一遍.所以可能找不到最新的文件;
  • 优点是查找速度非常快,秒查。

安装locate

# Centos7安装mlocate
yum install mlocate -y

# Ubuntu安装mlocate
apt install mlocate -y

创建数据库索引(必须执行)

第一次使用前必须创建数据库索引。
https://blog.csdn.net/xiexieya233/article/details/121430628
-o <文件>:忽略默认的数据库文件,使用指定的slocate数据库文件;
-U <目录>:更新指定目录的slocate数据库;
-v:显示执行的详细过程;

# 本地数据变化后需要先更新数据库--默认会每天更新数据库
updatedb

# 更新指定目录的slocate数据库
## -o<文件>:忽略默认的数据库文件,使用指定的slocate数据库文件;
## -U<目录>:更新指定目录的slocate数据库;
## -v:显示执行的详细过程;
updatedb -U <目录>

updatedb的配置文件/etc/updatedb.conf

参考: https://blog.csdn.net/weixin_37335761/article/details/122168037
https://rumenz.com/rumenbiji/linux-locate.html

cat /etc/updatedb.conf

# 打印
#开启搜索限制
PRUNE_BIND_MOUNTS = “yes” 
#搜索时不搜索的文件系统
PRUNEFS = 
#搜索时不搜索的文件类型
PRUNENAMES = 
# 搜索时不搜索的路径
PRUNEPATHS = 

在这里插入图片描述

查看数据库位置

# 查看数据库位置及索引数量
locate -S

在这里插入图片描述

locate常用参数

参考 https://wangchujiang.com/linux-command/c/locate.html
-l num(要显示的行数)
-i 关键字忽略大小写
-f 将特定的档案系统排除在外,如将proc排除在外
-r 使用正则运算式做为寻找条件

示例

查找和pwd相关的所有文件(文件名中包含pwd)

# 搜索文件名
locate 文件名

# 忽略大小写
locate -i 关键字

搜索指定路径下的文件

# 搜索etc目录下所有以sh开头的文件
locate /etc/sh

# 指定路径搜索
locate -b 路径/*/关键字

使用正则表达式匹配

# 查找/var目录下,以reason结尾的文件
locate -r '^/var.*reason$'(其中.表示一个字符,*表示任务多个;.*表示任意多个字符)