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 jpgmogrify是 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 -rhsort是一个用于对文本行进行排序的命令。-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 目前仍然是游戏的标准平台,因此首先在这个环境中进行…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...
