find 命令指南

ind 是 Linux/Unix 系统中最强大、最常用的文件搜索命令。它可以根据多种条件(名称、类型、大小、时间等)在指定目录中递归搜索文件,并执行相应操作。
一、基本语法

find [路径] [匹配条件] [操作]

路径:搜索的起始目录,默认为当前目录 .
匹配条件:各种搜索标准(名称、类型、时间等)
操作:对找到的文件执行的操作,默认为打印到屏幕

二、常用匹配条件

  1. 按文件名搜索
# 按名称(精确匹配)
find /home -name "file.txt"

# 按名称(不区分大小写)
find /home -iname "file.txt"

# 使用通配符
find /home -name "*.txt"
find /home -name "file?.txt"
  1. 按文件类型搜索
# f: 普通文件,d: 目录,l: 符号链接
find /var -type f
find /etc -type d
find /usr -type l

# 其他类型:b(块设备), c(字符设备), p(命名管道), s(套接字)
  1. 按文件大小搜索
# 大于10M的文件
find / -size +10M

# 小于1K的文件
find /var/log -size -1k

# 等于512字节的文件
find . -size 512c

# 单位:c(字节), k(KB), M(MB), G(GB)
  1. 按时间搜索
# 按修改时间(mtime)
find /etc -mtime -7    # 7天内修改的
find /home -mtime +30  # 30天前修改的
find . -mtime 7        # 正好7天前修改的

# 按访问时间(atime)
find /var/log -atime +90  # 90天前访问的

# 按状态改变时间(ctime)
find /etc -ctime -1    # 24小时内状态改变的

# 按分钟计算(min)
find /tmp -mmin -30    # 30分钟内修改的
  1. 按权限和所有权
# 按权限精确匹配
find . -perm 644

# 按权限模式匹配(至少包含这些权限)
find /usr/bin -perm -u=s  # 查找SUID文件
find . -perm -o=w         # 其他用户可写的文件

# 按用户和组
find /home -user john
find /var -group admin
find /etc -uid 1000

三、组合条件搜索

# AND 逻辑(默认)
find /home -name "*.txt" -type f

# OR 逻辑
find /var -name "*.log" -o -name "*.conf"

# NOT 逻辑
find . ! -name "*.tmp"
find /home -user john ! -type d

# 分组条件
find / \( -name "*.tmp" -o -name "*.log" \) -mtime +7

四、执行操作

  1. 默认操作:打印
find . -name "*.txt" -print  # 默认操作,可省略
  1. 删除文件
# 删除所有 .tmp 文件
find /tmp -name "*.tmp" -delete

# 安全删除(先查看)
find . -name "*.tmp" -type f -exec rm -f {} \;
  1. 执行命令(-exec)
# 基本格式
find . -name "*.txt" -exec command {} \;

# 示例:改变文件权限
find . -name "*.sh" -exec chmod 755 {} \;

# 示例:查找文件内容
find . -name "*.conf" -exec grep "error" {} \;

# 使用 + 代替 \; 提高效率(多个文件一起处理)
find . -name "*.jpg" -exec cp {} /backup/ +
  1. 其他操作
# -ls:显示详细信息
find /etc -name "*.conf" -ls

# -printf:格式化输出
find . -type f -printf "%p - %s bytes\n"

# -ok:交互式确认后执行
find . -name "*.old" -ok rm {} \;

五、实用示例

  1. 清理临时文件
# 删除7天前的 .log 文件
find /var/log -name "*.log" -mtime +7 -delete

# 删除空目录
find /tmp -type d -empty -delete
  1. 查找大文件
# 查找大于100M的文件
find / -type f -size +100M 2>/dev/null

# 查找并排序
find /home -type f -size +10M -exec du -h {} \; | sort -hr
  1. 批量修改文件
# 批量重命名
find . -name "*.jpeg" -exec rename 's/\.jpeg$/\.jpg/' {} \;

# 批量修改权限
find /var/www -type f -exec chmod 644 {} \;
find /var/www -type d -exec chmod 755 {} \;
  1. 安全检测
# 查找所有可执行文件
find /home -type f -perm -u=x

# 查找SUID/SGID文件
find / -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null

# 查找所有人可写的文件
find / -type f -perm -o=w ! -type l 2>/dev/null

六、性能优化技巧

# 1. 限制搜索深度
find /home -maxdepth 2 -name "*.txt"
find /var -mindepth 2 -name "*.conf"

# 2. 跳过特定目录(prune)
find /home -path "*/node_modules" -prune -o -name "*.js" -print

# 3. 将最可能排除的条件放在前面
find / -type f -name "*.log" -size +10M  # 好的顺序
find / -name "*.log" -type f -size +10M  # 可能较慢

七、注意事项
权限问题:可能需要 sudo 权限搜索系统目录
性能影响:在全盘搜索时可能消耗大量资源
通配符转义:使用通配符时用引号括起来
安全操作:使用 -ok 或先测试再执行危险操作

八、高级用法

# 使用正则表达式
find . -regex ".*\.\(txt\|pdf\)$"

# 按inode号查找
find / -inum 123456 -print 2>/dev/null

# 查找并压缩
find /var/log -name "*.log" -mtime +30 -exec gzip {} \;

# 查找硬链接
find /home -samefile /path/to/file
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容