find命令常用
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搜索
locate
是find
的加强版,需要先在本地创建索引
,搜索速度非常快
.
- 缺点是依赖索引数据库,非实时查找,数据库每天更新一遍.所以可能找不到最新的文件;
- 优点是查找速度非常快,秒查。
安装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$'(其中.表示一个字符,*表示任务多个;.*表示任意多个字符)