find 是 Linux 系统中最强大和最常用的文件搜索命令之一。它的参数非常丰富,可以组合使用以实现高度精确的搜索。下面是对其核心参数的详细分类和解释:
find [搜索路径] [匹配条件] [操作]
find . # 当前目录
find /home # 指定目录/home
find /etc /var # 多个目录
find / -name "file.txt" # 精确查找
find / -name "*.log" # 通配符*匹配
find / -iname "FILE.TXT" # 忽略大小写
find / -regex ".*\.conf$" # 正则表达式匹配
-type)find / -type f # 普通文件
find / -type d # 目录
find / -type l # 符号链接
find / -type b # 块设备
find / -type c # 字符设备
find / -type p # 命名管道
find / -type s # 套接字
以天为单位:
find / -mtime -7 # 7天内修改的文件
find / -mtime +30 # 30天前修改的文件
find / -mtime 10 # 正好10天前修改的文件
find / -atime -1 # 1天内访问的文件
find / -ctime +60 # 60天前状态改变的文件
以分钟为单位:
find / -mmin -30 # 30分钟内修改的文件
find / -amin +60 # 60分钟前访问的文件
相对时间:
find / -newer file.txt # 比file.txt更新的文件
find / -older file.txt # 比file.txt更旧的文件
-size)find / -size +100M # 大于100MB
find / -size -1G # 小于1GB
find / -size 50k # 正好50KB
find / -empty # 空文件或空目录
单位:
c - 字节k - KB (1024字节)M - MBG - GBfind / -user root # 属主是root
find / -group users # 属组是users
find / -uid 1000 # UID为1000
find / -gid 100 # GID为100
find / -perm 644 # 权限正好644
find / -perm -644 # 包含644权限(至少)
find / -perm /222 # 任何人可写
find / -perm /u+s # 设置了SUID
find / -perm /g+s # 设置了SGID
find / -maxdepth 2 # 最多搜索2层目录
find / -mindepth 3 # 从第3层开始搜索
find / -name "*.log" -a -mtime +7 # AND(默认)
find / -name "*.txt" -o -name "*.md" # OR
find / ! -name "*.tmp" # NOT
find / \( -name "*.txt" -o -name "*.pdf" \) -mtime -1 # 组合
基本操作:
find /tmp -name "*.tmp" -delete # 删除找到的文件
find / -name "*.conf" -ls # 显示详细信息(类似ls -l)
find / -type f -print # 打印路径(默认)
执行命令(-exec / -ok):
# -exec: 直接执行
find / -name "*.log" -exec rm {} \; # 删除所有.log文件
find / -type f -exec chmod 644 {} \; # 修改权限
# -ok: 交互式确认
find / -name "*.tmp" -ok rm {} \;
# + 替代 \; 提高效率
find / -name "*.jpg" -exec cp {} /backup/ \+
使用xargs(效率更高):
find / -name "*.log" -print0 | xargs -0 rm
find / -follow # 跟踪符号链接
find / -noleaf # 不优化基于非Unix文件系统的搜索
find / -xdev # 不跨越文件系统边界
find / -mount # 同-xdev
find / -prune # 排除目录
# 查找7天前的日志并删除
find /var/log -name "*.log" -mtime +7 -delete
# 查找大文件并排序
find / -type f -size +100M -exec du -h {} \; | sort -rh
# 查找所有可执行文件
find / -type f -perm /111
# 查找并备份配置文件
find /etc -name "*.conf" -exec cp {} /backup/ \;
# 查找SUID/SGID文件(安全审计)
find / -type f \( -perm -4000 -o -perm -2000 \) -ls
# 查找世界可写文件
find / -type f -perm -002 -exec ls -l {} \;
# 查找无主文件
find / -nouser -o -nogroup
# 查找今天修改过的Python文件
find . -name "*.py" -mtime 0
# 排除特定目录
find / -path "/proc/*" -prune -o -name "*.conf" -print
# 查找并统计文件数量
find /home -type f -name "*.jpg" | wc -l
-xdev:避免搜索挂载的文件系统
合理使用-maxdepth:限制搜索深度
-exec ... \+:批量处理比\;更高效
避免过度使用通配符:精确匹配更快
find命令的参数组合非常灵活,掌握这些参数可以帮助你高效地管理系统文件。建议通过man find查看完整手册。