当前位置: 首页 > news >正文

find 命令完整使用手册

🔍 强大的文件搜索工具 - Linux 文件查找之王


目录

  1. 简介
  2. 基础语法
  3. 按名称搜索
  4. 按类型搜索
  5. 按大小搜索
  6. 按时间搜索
  7. 按权限与用户搜索
  8. 按内容搜索
  9. 操作与动作
  10. 逻辑组合
  11. 实战示例
  12. 技巧与最佳实践

一、简介

1.1 什么是 find

find 是 Linux/Unix 中最强大的文件搜索工具,可以根据文件名、类型、大小、时间、权限等多种条件查找文件,并对结果执行操作。

核心特点

  • 支持多条件组合搜索
  • 支持正则表达式
  • 可对结果执行命令
  • 递归搜索目录
  • 支持逻辑运算(AND/OR/NOT)

二、基础语法

2.1 命令格式

find [搜索路径] [选项] [表达式] [动作]

2.2 常用选项

选项 说明
-name 按文件名(支持通配符)
-iname 按文件名(忽略大小写)
-type 按类型
-size 按大小
-mtime 按修改时间(天)
-atime 按访问时间(天)
-ctime 按创建时间(天)
-mmin 按修改时间(分钟)
-amin 按访问时间(分钟)
-cmin 按创建时间(分钟)
-perm 按权限
-user 按用户
-group 按用户组
-empty 空文件/目录
-path 按路径匹配
-regex 正则匹配
-maxdepth 最大搜索深度
-mindepth 最小搜索深度
-prune 排除目录
-exec 对结果执行命令
-ok 执行前确认
-delete 删除匹配文件
-print 打印路径(默认)
-ls 详细列表
! / -not 取反
-a / -and 与(默认)
-o / -or

三、按名称搜索

3.1 精确与通配符

# 按名称搜索(区分大小写)
find / -name "nginx.conf"
find . -name "*.txt"
find . -name "file?.log"
find . -name "[abc]*.txt"# 忽略大小写
find . -iname "README*"
find . -iname "*.JPG"
find . -iname "*.Mp3"# 搜索路径匹配
find . -path "*/src/*.java"
find . -path "*/test/*"
find . -path "./node_modules/*" -prune -o -name "*.js" -print# 正则表达式
find . -regex ".*\.\(py\|java\|js\)$"
find . -regex ".*test.*\.py$"
find . -iregex ".*\.jpg$"    # 忽略大小写

3.2 多名称搜索

# 使用 -o(或)
find . \( -name "*.jpg" -o -name "*.png" -o -name "*.gif" \)# 使用 -regex
find . -regex ".*\.\(jpg\|png\|gif\)"# 排除特定名称
find . -name "*.log" ! -name "error*"
find . ! -name "*.tmp" -type f

四、按类型搜索

4.1 文件类型

类型 说明
f 普通文件
d 目录
l 符号链接
b 块设备
c 字符设备
p 管道
s 套接字

4.2 示例

# 只搜索文件
find . -type f# 只搜索目录
find . -type d# 搜索符号链接
find . -type l# 搜索所有 .py 文件
find . -type f -name "*.py"# 搜索空目录
find . -type d -empty# 搜索空文件
find . -type f -empty# 统计文件数
find . -type f | wc -l# 统计目录数
find . -type d | wc -l

五、按大小搜索

5.1 大小单位

后缀 说明
c 字节
k KB
M MB
G GB
b 512 字节块
w 双字(2 字节)

5.2 大小比较

格式 说明
-size N 等于 N
-size +N 大于 N
-size -N 小于 N

5.3 示例

# 精确大小
find . -size 100c          # 恰好 100 字节
find . -size 10k           # 恰好 10KB# 大于
find . -size +100M         # 大于 100MB
find . -size +1G           # 大于 1GB# 小于
find . -size -1k           # 小于 1KB
find . -size -100M         # 小于 100MB# 范围
find . -size +10M -size -100M    # 10MB ~ 100MB
find . -size +1k -size -10k      # 1KB ~ 10KB# 实用场景
find / -type f -size +500M -exec ls -lh {} \;    # 大文件
find . -type f -size 0                             # 空文件
find /var/log -type f -size +100M                  # 大日志文件

六、按时间搜索

6.1 时间类型

选项 说明
-mtime N 修改时间(天)
-atime N 访问时间(天)
-ctime N 元数据变更时间(天)
-mmin N 修改时间(分钟)
-amin N 访问时间(分钟)
-cmin N 元数据变更时间(分钟)
-newer FILE 比文件更新
-anewer FILE 比文件访问时间更新
-cnewer FILE 比文件变更时间更新

6.2 时间比较

格式 说明
-mtime N 恰好 N 天前
-mtime +N 超过 N 天
-mtime -N N 天以内

6.3 示例

# 按天
find . -mtime -1           # 1 天内修改
find . -mtime -7           # 7 天内修改
find . -mtime +30          # 30 天前修改
find . -mtime +30 -mtime -60    # 30~60 天前# 按分钟
find . -mmin -10           # 10 分钟内修改
find . -mmin -60           # 1 小时内修改
find . -amin -60           # 1 小时内访问
find . -cmin -30           # 30 分钟内变更# 比较文件
find . -newer reference.txt     # 比 reference.txt 更新
find . -newermt "2024-01-01"    # 2024-01-01 之后修改
find . -newermt "2024-01-01" ! -newermt "2024-06-01"  # 日期范围# 实用场景
find /tmp -type f -mtime +7 -delete           # 删除 7 天前的临时文件
find /var/log -name "*.log" -mtime +30        # 30 天前的日志
find . -type f -mmin -60 -name "*.py"         # 1 小时内修改的 Python 文件

七、按权限与用户搜索

7.1 按权限

# 精确权限
find . -perm 755
find . -perm 644
find . -perm 777# 包含权限(至少有这些权限)
find . -perm -u+x          # 用户可执行
find . -perm -o+w          # 其他用户可写
find . -perm -4000          # SUID
find . -perm -2000          # SGID
find . -perm -1000          # Sticky bit# 任意匹配
find . -perm /u+x          # 用户可执行(任意匹配)
find . -perm /777          # 任一权限位匹配# 实用场景
find / -perm -4000 -type f         # 查找 SUID 文件
find / -perm -2000 -type f         # 查找 SGID 文件
find . -perm 777 -type f           # 查找完全开放权限的文件
find / -writable -type f           # 全局可写文件

7.2 按用户和组

# 按用户
find . -user root
find . -user www-data
find . -user mysql# 按组
find . -group docker
find . -group sudo# 查找无主文件
find / -nouser
find / -nogroup# 查找特定用户的文件
find /home -user john -type f# 组合
find . -user root -perm -4000     # root 的 SUID 文件

八、按内容搜索

# 查找包含特定文本的文件
find . -type f -name "*.py" -exec grep -l "import os" {} \;# 查找包含特定文本(忽略大小写)
find . -type f -exec grep -il "TODO" {} \;# 查找包含多个关键词的文件
find . -type f -name "*.java" -exec grep -l "SQLException" {} \;# 查找包含 IP 地址的文件
find . -type f -exec grep -l "192\.168\.1\." {} \;# 查找包含密码的文件(安全检查)
find . -type f \( -name "*.yml" -o -name "*.yaml" -o -name "*.env" -o -name "*.conf" \) \-exec grep -il "password\|secret\|token" {} \;# 统计代码行数
find . -name "*.py" -type f -exec wc -l {} + | tail -1# 查找 TODO 和 FIXME
find . -type f \( -name "*.py" -o -name "*.js" -o -name "*.java" \) \-exec grep -in "TODO\|FIXME" {} +

九、操作与动作

9.1 -exec 执行命令

# 基本格式
find . -name "*.log" -exec command {} \;# 列出文件详情
find . -name "*.conf" -exec ls -la {} \;# 删除文件
find . -name "*.tmp" -exec rm {} \;
find . -name "*.log" -exec rm -f {} \;# 复制文件
find . -name "*.jpg" -exec cp {} /backup/ \;# 移动文件
find . -name "*.old" -exec mv {} /archive/ \;# 更改权限
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;# 更改用户
find . -type f -user old -exec chown new {} \;# 压缩文件
find . -name "*.log" -exec gzip {} \;# 批量执行(+ 号更高效)
find . -name "*.log" -exec rm {} +       # 比 \; 更快
find . -type f -exec ls -la {} +
find . -name "*.py" -exec grep "import" {} +

9.2 -ok 确认执行

# 每个文件都确认
find . -name "*.tmp" -ok rm {} \;
# < rm ... /path/to/file.tmp > ? y

9.3 -delete 删除

# 删除匹配文件(比 -exec rm 更安全)
find . -name "*.tmp" -delete
find . -type f -empty -delete
find /tmp -type f -mtime +7 -delete

9.4 -ls 详细列表

find . -name "*.conf" -ls
# 输出类似 ls -dils

9.5 -printf 自定义输出

# 只显示文件名
find . -name "*.py" -printf "%f\n"# 显示大小和路径
find . -name "*.log" -printf "%s %p\n"# 显示修改时间和路径
find . -type f -printf "%TY-%Tm-%Td %TH:%TM %p\n"# CSV 格式
find . -type f -printf "%p,%s,%TY-%Tm-%Td\n"# 完整信息
find . -type f -printf "%p\t%sk\t%TY-%Tm-%Td %TH:%TM\n"

十、逻辑组合

10.1 AND(默认)

# 多条件同时满足(AND 是默认的)
find . -name "*.py" -type f
find . -name "*.log" -size +10M
find . -type f -mtime -7 -name "*.java"

10.2 OR

# 多个条件任一满足
find . \( -name "*.jpg" -o -name "*.png" -o -name "*.gif" \)
find . \( -name "*.py" -o -name "*.pyc" \) -type f
find . -type f \( -name "*.log" -o -name "*.tmp" \)

10.3 NOT

# 排除条件
find . ! -name "*.pyc"
find . -type f ! -name "*.log"
find . ! -path "*/node_modules/*" -name "*.js"
find . ! -path "*/.git/*" -type f

10.4 组合

# 复杂条件
find . -type f \( -name "*.py" -o -name "*.js" \) ! -path "*/venv/*" ! -path "*/node_modules/*"# 排除多个目录
find . \( -name .git -o -name node_modules -o -name __pycache__ \) -prune -o -type f -name "*.py" -print# 条件组合
find . -type f \( -name "*.conf" -o -name "*.yaml" \) -size +0 -mtime -7

十一、实战示例

11.1 清理临时文件

# 删除 7 天前的日志
find /var/log -name "*.log" -mtime +7 -delete# 删除空文件
find . -type f -empty -delete# 删除空目录
find . -type d -empty -delete# 删除特定后缀的临时文件
find /tmp -type f \( -name "*.tmp" -o -name "*.bak" -o -name "*.swp" \) -delete# 清理旧备份
find /backup -name "*.tar.gz" -mtime +30 -delete

11.2 查找大文件

# 当前目录最大的 10 个文件
find . -type f -exec ls -lh {} + | sort -k5 -hr | head -10# 超过 100MB 的文件
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null# 超过 1GB 的文件
find / -type f -size +1G 2>/dev/null# 按大小排序
find . -type f -printf "%s %p\n" | sort -rn | head -20

11.3 查找最近修改的文件

# 1 小时内修改的文件
find . -type f -mmin -60# 今天修改的文件
find . -type f -mtime -1# 最近 10 分钟修改的 Python 文件
find . -name "*.py" -type f -mmin -10# 比某个文件更新的文件
find . -type f -newer main.py

11.4 代码项目搜索

# 统计代码行数
find . -name "*.py" -not -path "*/venv/*" -not -path "*/__pycache__/*" | xargs wc -l | tail -1# 查找所有 Python 文件(排除虚拟环境)
find . -name "*.py" -not -path "*/venv/*" -not -path "*/.venv/*"# 查找未使用的导入
find . -name "*.py" -exec grep -l "^import" {} \; | while read f; domodule=$(grep "^import " "$f" | awk '{print $2}')for m in $module; doif ! grep -rq "$m" "$f" | grep -v "^import"; thenecho "$f: unused import $m"fidone
done# 查找硬编码的密钥
find . -type f \( -name "*.py" -o -name "*.js" -o -name "*.env" \) \-exec grep -il "api_key\|secret\|password\s*=" {} \; \-not -path "*/node_modules/*" -not -path "*/.git/*"

11.5 系统管理

# SUID 文件(安全检查)
find / -perm -4000 -type f 2>/dev/null# 全局可写文件
find / -perm -o+w -type f 2>/dev/null# 无主文件
find / -nouser -o -nogroup 2>/dev/null# 最近修改的配置文件
find /etc -type f -mtime -1# 查找所有日志文件
find /var/log -type f -name "*.log"# 查找所有 cron 任务文件
find /etc/cron* -type f
find /var/spool/cron -type f

11.6 批量操作

# 批量修改权限
find /var/www -type f -exec chmod 644 {} +
find /var/www -type d -exec chmod 755 {} +# 批量修改用户
find /var/www -exec chown www-data:www-data {} +# 批量备份
find . -name "*.conf" -exec cp {} {}.bak \;# 批量压缩
find . -name "*.log" -mtime +7 -exec gzip {} \;# 批量替换文本
find . -name "*.py" -exec sed -i 's/old_name/new_name/g' {} +

十二、技巧与最佳实践

12.1 性能优化

# 限制搜索深度
find . -maxdepth 3 -name "*.py"# 排除目录
find . -not -path "*/.git/*" -not -path "*/node_modules/*" -type f# 使用 + 而不是 \;
find . -name "*.log" -exec rm {} +     # 快
find . -name "*.log" -exec rm {} \;    # 慢# 指定文件系统
find . -xdev -type f -size +100M     # 不跨文件系统# 使用 locate 替代(更快,但有延迟)
sudo updatedb
locate filename

12.2 常见陷阱

陷阱 1:权限不足

# 重定向错误
find / -name "*.conf" 2>/dev/null# 使用 sudo
sudo find / -name "*.conf"

陷阱 2:文件名含空格

# 使用 -print0 和 xargs -0
find . -name "*.jpg" -print0 | xargs -0 rm# 或使用 -exec
find . -name "*.jpg" -exec rm {} +

陷阱 3:-exec 结尾

# \; 对每个文件执行一次
find . -name "*.log" -exec grep "error" {} \;# + 批量执行(更高效)
find . -name "*.log" -exec grep "error" {} +

12.3 实用别名

# 添加到 ~/.bashrc# 快速搜索文件
alias ff='find . -type f -name'# 快速搜索目录
alias fd='find . -type d -name'# 搜索大文件
alias fbig='find . -type f -size +100M -exec ls -lh {} \;'# 搜索最近修改
alias frec='find . -type f -mmin -60'# 搜索空文件
alias fempty='find . -type f -empty'# 按内容搜索
alias fcont='find . -type f -exec grep -il'

附录

A. 选项速查表

搜索条件

选项 说明
-name 文件名
-iname 文件名(忽略大小写)
-type 文件类型
-size 文件大小
-mtime 修改时间(天)
-mmin 修改时间(分钟)
-atime 访问时间(天)
-ctime 变更时间(天)
-perm 权限
-user 用户
-group 用户组
-empty
-path 路径匹配
-regex 正则匹配
-maxdepth 最大深度
-prune 排除目录

动作

选项 说明
-print 打印(默认)
-ls 详细列表
-delete 删除
-exec 执行命令
-ok 确认执行
-printf 自定义输出

逻辑

操作符 说明
-a AND(默认)
-o OR
! / -not NOT
() 分组

B. 常用命令

# 按名称
find . -name "*.txt"# 按类型
find . -type f
find . -type d# 按大小
find . -size +100M# 按时间
find . -mtime -7# 排除目录
find . -not -path "*/.git/*"# 执行命令
find . -name "*.log" -exec rm {} +# 删除空文件
find . -empty -delete# 组合搜索
find . -type f -name "*.py" -mtime -1 -not -path "*/venv/*"

C. 在线资源

  • GNU Find: https://www.gnu.org/software/findutils/
  • man page: man find
  • find 教程: https://man7.org/linux/man-pages/man1/find.1.html

http://www.jsqmd.com/news/624547/

相关文章:

  • 【Java 25虚拟线程企业级落地白皮书】:20年架构老兵亲授高并发场景下的零停机迁移实战路径
  • 2026年杭州门窗改造选购攻略:教你5招挑对省钱又耐用的好门窗 - 精选优质企业推荐榜
  • 温州市温瑞再生资源回收有限公司:鹿城区废旧物资回收电话 - LYL仔仔
  • 2025届必备的AI辅助写作方案推荐榜单
  • 3个步骤实现Zotero笔记与Obsidian双向同步:告别手动复制粘贴
  • 如何快速掌握明日方舟自动化助手:MAA新手完整指南
  • 盗版游戏安装包的“隐形炸弹”:实测byrut下载器如何利用组策略和文件夹权限阻止你安装杀毒软件
  • 2026上海家装优质企业调研评定:从工地实操到业主反馈 - 速递信息
  • 2026年优质的离子交换设备实力厂家口碑推荐,净水机/离子交换设备/水处理设备/反渗透膜/混床设备,离子交换设备厂商推荐 - 品牌推荐师
  • Refined Now Playing:当音乐播放器遇见你的审美偏好
  • mysql之表的查询
  • 上海家装行业2026年度优质品牌推荐:工地与业主视角分析 - 速递信息
  • nmap 命令完整使用手册
  • 终极指南:3步掌握Yansongda Pay统一支付SDK,告别多平台支付接入烦恼
  • DDrawCompat:让经典DirectDraw游戏在现代Windows上重获新生的终极方案
  • Windows 11拖放修复终极指南:5分钟恢复任务栏拖放功能
  • 建筑工程行业融资难?我发现能拿到低息贷款的老板,第一步是选对了渠道 - 速递信息
  • 2025届毕业生推荐的五大AI论文平台解析与推荐
  • PKHeX自动合法性插件:如何5分钟内完成宝可梦数据合规检查
  • YOLO-Master 与 YOLO 开始美
  • 003-注意力机制详解:从基础Attention到DeepSeek的优化策略
  • gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具仲
  • 别再为排版翻车了!微信编辑器哪里买?深度解析6款,新手秒上手 - 速递信息
  • 2026洛阳江浙菜宴请选型指南:3个硬指标 - 精选优质企业推荐榜
  • 跟随b站狂神老师步入博客
  • 浏览器Cookie本地导出终极方案:Get cookies.txt LOCALLY完全指南
  • 杭州房产抵押贷款哪家好?2026正规银行+助贷机构盘点|杭州抵押贷办理流程及避坑指南 - 速递信息
  • STM32开发者必看:Openocd烧录全流程详解(附Keil生成bin文件技巧)
  • 从创意到实体:Blender 3MF插件的完整3D打印解决方案
  • 南京经略碳纤维拉挤技术引领创新,以严苛匠心铸就高端型材精品 - 博客湾