Linux搜索---find
find搜索
find 命令的核心功能是在指定的目录路径下,递归地搜索文件和目录,并且可以根据多种条件对搜索结果进行筛选,还能对符合条件的文件和目录执行特定操作。
一、基础语法结构
find [起始目录] [匹配条件] [执行操作]
# 基本示例
find ~/Documents -name "*.pdf" -exec ls -lh {} \;
二、核心匹配条件详解
1. 文件名匹配
参数 | 功能描述 | 示例 |
---|---|---|
-name | 精确文件名匹配 | find /etc -name "nginx.conf" |
-iname | 不区分大小写匹配 | find . -iname "README" |
-regex | 正则表达式匹配 | find . -regex ".*\.\(jpg|png\)$" |
通配符对照表:
? → 匹配单个字符(除路径分隔符)
* → 匹配任意长度字符
[] → 字符集合(如[a-z0-9])
2. 文件类型筛选
find /dev -type c # 字符设备文件
find . -type d -empty # 空目录
find ~ -type l # 符号链接
type参数对照:
f → 普通文件
d → 目录
l → 符号链接
b → 块设备
c → 字符设备
s → 套接字
p → 命名管道
3. 时间维度搜索
# 修改时间(mtime)
find /var/log -mtime +30 # 30天前修改过的文件
find /backup -mmin -60 # 60分钟内修改过的文件# 访问时间(atime)
find /home -atime -7 # 7天内被访问过的文件# 创建时间(ctime)
find . -ctime 0 # 24小时内创建的文件
4. 文件大小筛选
find / -size +1G # 大于1GB的文件
find . -size -500k # 小于500KB的文件
find /tmp -size +10M -size -100M # 10MB到100MB之间
单位对照表:
c → bytes
k → kilobytes (1024 bytes)
M → megabytes
G → gigabytes
三、高级组合技巧
1. 逻辑运算符
对比其他逻辑符
操作符 | 含义 | 示例 | 作用 |
---|---|---|---|
-a | 逻辑与(AND) | -name "a" -a -size +1M | 同时满足名称和大小条件的文件 |
-o | 逻辑或(OR) | -name "a" -o -name "b" | 满足名称是 “a” 或 “b” 的文件 |
! | 逻辑非(NOT) | ! -name "*.tmp" | 排除所有 .tmp 文件 |
# AND组合(默认)
find . -name "*.tmp" -size +1M# OR条件
find / \( -name "*.log" -o -name "*.out" \)# NOT排除
find ~/ ! -user $(whoami)
⚠️ 括号转义**
\( ... \)
** 的必要性
\( ... \)
括号用于将多个条件组合成一个整体(需转义为\(
和\)
避免 Shell 误解析)
如果直接写成-name "*.log" -o -name "*.out"
而不加括号,find
的解析优先级可能导致逻辑错误。转义括号\(
和\)
是必须的,用于明确条件分组。
补充:
-user
选项:在 find 命令里,-user 属于一个测试选项,其用途是依据文件的所有者来筛选文件。
find ~/ ! -user $(whoami)
-user $(whoami)
:这里的 $(whoami) 会被替换成当前登录用户的用户名,-user 选项会检查文件的所有者是否为当前用户。
2. 深度控制
find /var -maxdepth 2 -name "*.conf" # 限制搜索层级
find . -mindepth 3 -type f # 从第3层开始搜索
3. 权限过滤
find /etc -perm 644 # 精确权限匹配
find . -perm /u=x # 用户有执行权限
find ~ -perm -g=w # 组用户有写权限
四、动作处理指令
1. 基础操作
# 简单输出
find . -print # 默认动作,可省略
find /tmp -ls # 显示详细信息# 删除操作
find /tmp -name "core.*" -delete
2. -exec 执行命令
-exec
是find 命令的一个选项,用于指定对查找到的每个文件或目录执行的命令。当 find 命令找到符合条件的文件或目录时,会将这些文件或目录作为参数传递给 -exec 后面的命令。
特殊格式说明:
{} → 匹配到的文件名占位符
\; → 命令终止符(必须转义)
-execdir → 在文件所在目录执行
# 标准格式
find [path] [conditions] -exec command {} \;# 文件批量重命名
find . -name "*.jpg" -exec rename 's/IMG/Photo/' {} \;# 结合xargs处理
find /log -name "*.log" -print0 | xargs -0 rm
\;
含义:-exec 选项的结束标志,用于告诉 find 命令 -exec 后面的命令到此结束。注意,; 在 shell 中有特殊含义,因此需要使用反斜杠 \ 进行转义,以避免被 shell 误解。
1.详细解释find . -name "*.jpg" -exec rename 's/IMG/Photo/' {} \;
rename
是一个用于批量重命名文件的命令。's/IMG/Photo/'
是 rename 命令使用的替换规则,它采用的是 Perl 风格的正则表达式替换语法。具体来说:s
表示替换操作(substitute)。/IMG/Photo/
中,IMG
是要被替换的字符串,Photo
是替换后的字符串。也就是说,rename 命令会将文件名中所有的 IMG 替换为 Photo。
2.详细解释 find /log -name "*.log" -print0 | xargs -0 rm
此命令的主要功能是在 /log
目录及其子目录中查找所有扩展名为 .log
的文件,并将这些文件删除。
1. find
命令部分
find
:这是一个用于在文件系统中搜索文件和目录的强大工具。/log
:指定了搜索的起始路径,即从/log
目录开始,递归地搜索其所有子目录。-name "*.log"
:这是一个筛选条件,-name
选项用于根据文件名进行匹配。*.log
是一个通配符表达式,其中*
表示任意数量的任意字符,所以该条件会匹配所有文件名以.log
结尾的文件。-print0
:find
命令的一个选项,它会将查找到的每个符合条件的文件的完整路径输出,并且每个路径之间用空字符(\0
)分隔,而不是默认的换行符。使用空字符作为分隔符可以避免文件名中包含空格、换行符等特殊字符时可能导致的问题。
2. |
(管道符号)
管道符号用于将一个命令的输出作为另一个命令的输入。在这里,find
命令的输出(即所有符合条件的 .log
文件的路径)会被传递给 xargs
命令。
3. xargs
命令部分
xargs
:这个命令用于将标准输入的内容转换为命令行参数。它会读取输入的内容,并将其拆分成多个参数,然后传递给指定的命令执行。-0
:xargs
命令的一个选项,它告诉xargs
使用空字符(\0
)作为输入内容的分隔符,这与find
命令的-print0
选项相匹配,确保在处理包含特殊字符的文件名时不会出错。rm
:xargs
要执行的命令,即删除文件的命令。xargs
会将从find
命令接收到的文件路径作为参数传递给rm
命令,从而实现对这些文件的删除操作。
注意事项
- 此命令会直接删除文件,且没有确认提示,使用时需谨慎,确保操作的文件是你确实想要删除的。
- 如果
/log
目录不存在或者没有足够的权限访问该目录及其文件,命令可能会报错。
3. 安全确认模式
-ok
是 find 命令的一个选项,与 -exec 类似,都是用于指定对查找到的符合条件的文件执行特定命令。但 -ok 比 -exec 更加谨慎,它在执行命令之前会向用户进行确认。只有当用户输入 y 或 Y 表示同意后,才会真正执行命令;若输入其他内容,则会跳过该文件,继续处理下一个符合条件的文件。
find /var -name "*.old" -ok rm {} \; # 每项操作前确认
五、性能优化方案
-
搜索路径优化
# 优先指定最小范围 find /home/user/project -name "*test*"
-
排除特定目录
find / -path "/mnt" -prune -o -name "*.conf"
-prune
是 find 命令的一个选项,其作用是告诉 find 命令跳过当前匹配到的目录,不继续递归搜索该目录及其子目录。在这个命令中,当 find 遇到 /mnt 目录时,使用 -prune 选项会跳过 /mnt 目录及其所有子目录,避免在这些目录中进行后续的搜索操作。
- 并行处理加速
find . -type f -print0 | xargs -0 -P 4 md5sum
-P 4
:xargs 命令的选项,-P 用于指定并行执行命令的最大进程数。这里的 4 表示 xargs 最多会同时启动 4 个进程来执行后续的命令,以此提高处理效率。md5sum
:是一个用于计算文件 MD5 哈希值的命令。xargs 会将从 find 命令接收到的文件路径作为参数传递给 md5sum 命令,从而对这些文件计算 MD5 哈希值。
六、经典应用场景
1. 系统清理
# 删除7天前的临时文件
find /tmp -type f -mtime +7 -delete# 查找空目录并删除
find . -type d -empty -exec rmdir {} \;
2. 安全审计
查找SUID权限文件
find / -perm /4000 -user root -type f
-perm /4000
-perm
选项:用于根据文件的权限来筛选文件。/
符号:在权限匹配中,/ 表示 “或” 的关系,即只要文件的权限中包含指定的任何一位权限,该文件就会被匹配。4000
:在 Unix/Linux 系统中,文件权限使用数字表示,4000 对应的是 suid(Set User ID)位。当一个文件设置了 suid 位,普通用户在执行该文件时,会以文件所有者的身份运行。所以 -perm /4000 表示查找那些具有 suid 位权限的文件。
-user root
-user
选项:用于根据文件的所有者来筛选文件。root
:表示文件的所有者必须是 root 用户。因此,该条件会筛选出所有者为 root 的文件。
检测世界可写文件
find / -xdev -type f -perm -o=w ! -user root
-xdev
选项表示 “不跨越设备”(don’t cross devices)。当使用该选项时,find 命令只会在当前文件系统中进行搜索,不会跨越到其他挂载的文件系统。例如,如果 /home 挂载在另一个磁盘分区上,使用 -xdev 后,find 不会搜索 /home 目录所在的文件系统,仅在根目录所在的文件系统中查找文件。-perm -o=w
-perm
选项用于根据文件的权限来筛选文件。-
表示文件的权限必须完全包含指定的权限位。o
表示其他用户(other users),即除了文件所有者和所属组用户之外的用户。=w
表示具有写权限。所以 -perm -o=w 表示查找那些其他用户对其具有写权限的文件。
! -user root
!
是逻辑非操作符,表示取反。-user
选项用于根据文件的所有者来筛选文件。root
表示 root 用户。所以 ! -user root 表示查找文件所有者不是 root 用户的文件。
3. 批量处理
# 修改文件权限
find /shared -type f -exec chmod 644 {} \;# 转换图片格式
find . -name "*.png" -exec mogrify -format jpg {} \;
mogrify -format jpg
mogrify
是 ImageMagick 软件包中的一个工具,用于对图像文件进行批量修改,如调整大小、改变格式、添加水印等。-format jpg
是 mogrify 的一个选项,用于指定将图像文件转换为 JPEG 格式。
七、异常处理指南
- 权限问题
在 Linux 系统中,每个进程都有三个标准数据流:标准输入(stdin,文件描述符为 0)、标准输出(stdout,文件描述符为 1)和标准错误输出(stderr,文件描述符为 2)。sudo find / -name "kernel.log" 2>/dev/null
- 2>/dev/null
2> 是重定向符号,用于将标准错误输出(文件描述符为 2)重定向到指定的位置。
/dev/null 是一个特殊的设备文件,也被称为 “黑洞”,所有写入它的数据都会被丢弃。所以 2>/dev/null 的作用是将 find 命令执行过程中产生的所有错误信息重定向到 /dev/null,从而在终端上不会显示这些错误信息,使输出更加简洁。
-
特殊字符处理
find . -name "* strange*" -exec echo {} \;
-
性能监控
time find / -type f -name "*.conf" >/dev/null 2>&1 #合并2stderr和1stdout
- time
time
是一个用于测量命令执行时间的工具。它可以统计命令从开始执行到结束所花费的时间,通常会输出三个时间指标: - 用户时间(user time):命令在用户态执行所花费的 CPU 时间。
- 系统时间(system time):命令在内核态执行所花费的 CPU 时间。
- 实际时间(real time):从命令开始执行到结束所经过的实际时间,这个时间包含了 CPU 等待 I/O 操作等非 CPU 计算的时间。
八、组合命令示例
查找大文件并排序
find / -type f -size +100M -exec du -h {} \; | sort -rh
du
是一个用于估算文件或目录磁盘使用空间的命令。-h
是 du 命令的选项,用于以人类可读的格式显示文件大小,例如使用 KB、MB、GB 等单位。sort -rh
sort
是一个用于对文本行进行排序的命令。-r
是 sort 命令的选项,表示反向排序,即从大到小排序。-h
是 sort 命令的选项,用于按照人类可读的文件大小格式进行排序。所以 sort -rh 会将 du -h 输出的结果按照文件大小从大到小进行排序。
实时监控文件变化
watch -n 5 'find /uploads -newermt "5 minutes ago"'
-
watch
watch 是一个 Linux 命令,它可以周期性地执行指定的命令,并将命令的输出结果显示在终端上。每次执行命令后,watch 会清空终端屏幕,然后显示新的命令输出,方便用户实时观察命令执行结果的变化。 -
-n 5
-n
是 watch 命令的一个选项,用于指定命令执行的时间间隔,单位为秒。这里的 5 表示每隔5
秒执行一次后面指定的命令。 -
-newermt
:find 命令的一个选项,用于根据文件的修改时间来筛选文件和目录。-newermt 后面需要跟一个时间参数,它会找出修改时间晚于指定时间的文件和目录。
# 创建文件清单
find src/ -name "*.java" -fprintf filelist.txt "%p\n"
-fprintf
是 find 命令的一个选项,用于将查找到的符合条件的文件信息按照指定的格式写入到指定的文件中。"%p\n"
这是 -fprintf 选项的格式字符串,用于指定写入文件的内容格式:%p
是一个占位符,表示文件的完整路径。\n
是换行符,用于在每个文件路径后面添加一个换行,使每个文件路径单独占一行。
💡 建议:将常用find组合保存为别名
alias findlarge='find . -type f -size +100M -exec ls -lh {} \; | awk "{ print \$NF \": \" \$5 }"'
此命令行定义了一个名为 findlarge 的别名(alias)。该别名的作用是在当前目录(.)及其子目录中查找大小超过 100MB 的普通文件,然后将这些文件的文件名和文件大小以易读的格式输出。
alias
是一个用于创建命令别名的 shell 命令。通过创建别名,你可以为一个复杂的命令序列定义一个简短、易记的名称,之后在命令行中输入这个别名就相当于执行了完整的命令序列。
我有快乐的勇气,也有悲伤的勇气。 —阿尔弗雷德·阿德勒
相关文章:
Linux搜索---find
find搜索 find 命令的核心功能是在指定的目录路径下,递归地搜索文件和目录,并且可以根据多种条件对搜索结果进行筛选,还能对符合条件的文件和目录执行特定操作。 一、基础语法结构 find [起始目录] [匹配条件] [执行操作] # 基本示例 find…...
python之爬虫入门实例
链家二手房数据抓取与Excel存储 目录 开发环境准备爬虫流程分析核心代码实现关键命令详解进阶优化方案注意事项与扩展 一、开发环境准备 1.1 必要组件安装 # 安装核心库 pip install requests beautifulsoup4 openpyxl pandas# 各库作用说明: - requests&#x…...
Blender常用快捷键的汇总
一、基础操作 全选/取消全选:A(全选)、AA(连续按两次A取消全选)复制物体:Shift D(复制后需点击确认位置)移动物体:G(按X/Y/Z可约束轴向移动)旋转…...

鸿蒙启动页开发
鸿蒙启动页开发 1.1 更改应用名称和图标 1.更改应用图标 找到moudle.json5文件,找到应用启动的EntryAbility下面的icon,将原来的图标改成自己设置的即可 2.更改应用名称 3.效果展示 2.1 广告页面开发 3.1 详细介绍 3.1.1 启动页面 import { PrivacyDialog } fr…...

Unity 文字高度自适应
期望 文字有字号限制,输入文字文字后先判断高度是否适用于限制字号,若处于最小字号时高度任不适用,则调整RectTransform 的高度。 核心代码 每次输入文字时先将字号设定为原始字号。 comp.fontSize fontSize; comp.text content; 拓展T…...

Teaching Small Language Models Reasoning throughCounterfactual Distillation
2024.emnlp-main.333.pdfhttps://aclanthology.org/2024.emnlp-main.333.pdf 1.概述 大型语言模型(LLM),如GPT-3,在各种下游任务中表现出色,包括通过链式思维(CoT)进行问题解答。CoT鼓励模型在解决问题时生成中间推理步骤。尽管LLM取得了成功,但由于模型大小的限制,其…...

快速开始React开发(一)
快速开始React开发(一) React是一个JavaScript库,用于构建交互式网站,并且能够快捷创建SPA(Single Page App),其组件化的思想也是被一再传播,无论是普通的Web网站还是嵌入移动端交互…...
2025最新Transformer模型及深度学习前沿技术应用
第一章、注意力(Attention)机制 1、注意力机制的背景和动机(为什么需要注意力机制?注意力机制的起源和发展里程碑)。 2、注意力机制的基本原理(什么是注意力机制?注意力机制的数学表达与基本公…...

极狐GitLab 正式发布安全版本17.9.1、17.8.4、17.7.6
本分分享极狐GitLab 补丁版本 17.9.1、17.8.4、17.7.6 的详细内容。这几个版本包含重要的缺陷和安全修复代码,我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS,技术团队已经进行了升级,无需用户采取任何…...
[环境搭建篇] Windows 环境下如何安装Docker工具
Windows 环境下如何安装Docker工具 1. 检查系统要求2. 启用WSL 2和虚拟化步骤一:启用WSL步骤二:启用虚拟化(Hyper-V)步骤三:安装WSL 2内核 3. 安装Docker Desktop4. 配置Docker5. 家庭版用户替代方案6. 常见问题解决问…...
JavaScript 数组和字符串方法详解
一、数组方法 数组方法是操作数组的核心工具,分为修改原数组和返回新数组两类。 1. 常用修改原数组的方法 方法参数返回值说明示例push...items新长度末尾添加元素arr.push(4) → [1,2,3,4]pop无删除的元素删除最后一个元素arr.pop() → 3(原数组变[1,…...

达梦数据库系列之Mysql项目迁移为达梦项目
达梦数据库系列之Mysql项目迁移为达梦项目 1 达梦数据库安装及MySql数据迁移2 SpringBoot项目迁移2.1 驱动包引入2.2 驱动类配置2.3 数据源配置2.4 flowable迁移2.4.1 异常问题2.4.2 解决 3 迁移常见问题3.1 不是 GROUP BY 表达式3.1.1 dm.ini 开启Mysql兼容模式3.1.2 修改动态…...
10个实用IntelliJ IDEA插件
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 以下是为提升开发效率推荐的10个实用IntelliJ IDEA插件,涵盖代码质量、效率工具及热门框架支持: 一、代码质量与规范 SonarLint 实时…...

10分钟从零开始搭建机器人管理系统(飞算AI)
1. 安装插件 https://www.feisuanyz.com/ 2. Intellij IDEA中运行 创建一个BS架构的机器人远程操控系统,具备机器人状态及位置实时更新,可以实现机器人远程遥控,可以对机器人工作日志进行统计分析,以及其它管理系统的常用功能3…...

[自动驾驶-传感器融合] 多激光雷达的外参标定
文章目录 引言外参标定原理ICP匹配示例参考文献 引言 多激光雷达系统通常用于自动驾驶或机器人,每个雷达的位置和姿态不同,需要将它们的数据统一到同一个坐标系下。多激光雷达外参标定的核心目标是通过计算不同雷达坐标系之间的刚性变换关系(…...

怎么让呼叫中心支持高并发
基于FreeSWITCH的呼叫中心系统并发性能优化指南 在呼叫中心系统建设中,高并发处理能力是衡量系统稳定性和效率的核心指标。作为开源软交换平台的代表,FreeSWITCH凭借其线程模型和模块化架构,天然适合高并发场景。然而,实际应用中仍…...
Elasticsearch简单学习
1、依赖的导入 <!--ES依赖--> <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency>2、客户端链接 RestHighLevelClient client new RestHigh…...

就像BGP中的AS_PATH一样,无论路途多远,我愿意陪你一起走——基于华为ENSP的BGP的路由负载均衡及过滤深入浅出
本篇技术博文摘要 🌟 本文内容涵盖了BGP负载均衡的基本概念、配置技巧和在实际网络中的应用,包括如何在华为ENSP上实现负载均衡和路由过滤。通过配置BGP的前缀列表、ACL以及路由过滤策略,可以实现网络流量的精确控制和优化,提高网…...
valgrind 检测多线程 bug,检测 并发 bug concurrent bug parallel bug
valgrind --toolhelgrind ./your_program 如果检测的对象是大型程序,可以设定仅在某些函数中开启 valgrind 的检测: Valgrind 提供了一些客户请求(client requests),可以在代码中插入特定的宏来控制 Valgrind 的行为。…...

游戏引擎学习第135天
仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾 game_asset.cpp 的创建 在开发过程中,不使用任何现成的游戏引擎或第三方库,而是直接基于 Windows 进行开发,因为 Windows 目前仍然是游戏的标准平台,因此首先在这个环境中进行…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...