find 是 Linux 系统最强盛的文件搜刮工具,支持 嵌套遍历、条件筛选、实行动作。以下通过场景分类解析焦点用法,涵盖高效搜刮、文件管理及高级技巧:
一、底子搜刮模式
1. 按文件名搜刮(精确/含糊匹配)
- [/code] <BASH>
- [code]find /path -name "*.log" # 精确匹配 .log 后缀(区分大小写)
- find /home -iname "*.TXT" # 模糊匹配 .txt 后缀(忽略大小写)
- find . -name "data_[0-9].csv" # 使用通配符 [] ? * 匹配
复制代码 2. 排除指定目次/文件
- [/code] <BASH>
- [code]find /var/log -path "/var/log/nginx" -prune -o -name "*.log" # 排除 nginx 目录
- find . -not -name "*.tmp" # 排除所有 .tmp 文件
复制代码 二、根据文件类型筛选
使用 -type 筛选文件类型:
- f: 通例文件
- d: 目次
- l: 符号链接
- s: 套接字
- p: 定名管道
- [/code] <BASH>
- [code]find /opt -type d -name "config" # 搜索名为 config 的目录
- find ~/ -type f -empty # 查找当前用户下空文件
- find /tmp -type l -ls # 列出 /tmp 下所有符号链接详细信息
复制代码 三、时间维度搜刮
按时间筛选(文件修改时间 -mtime / 访问时间 -atime):
- +n: n 天前
- -n: 最近 n 天内
- n: 恰恰 n 天前
- [/code] <BASH>
- [code]find . -mtime -7 # 查找过去 7 天内修改过的文件
- find /var/log -mtime +30 -name "*.log" # 搜索 30 天前的日志文件
复制代码 按分钟级精准控制(-mmin):
- [/code] <BASH>
- [code]find /tmp -mmin -10 # 查找过去 10 分钟内修改的文件
复制代码 四、文件大小搜刮
使用 -size (单位:c=字节, k=KB, M=MB, G=GB):
- +n: 大于 n
- -n: 小于 n
- n : 便是 n
- [/code] <BASH>
- [code]find / -size +100M # 全局搜索大于 100MB 的文件(慎用根目录)
- find ~/Downloads -size -5k # 查找 Downloads 中小于 5KB 的文件
复制代码 五、权限与所有权过滤
1. 按权限位搜刮(数字或符号模式)
- [/code] <BASH>
- [code]find . -perm 644 # 精确匹配权限为 644 的文件
- find /etc -perm -u=r # 用户可读的文件(权限包含 r)
- find /bin -perm /u=s # 包含 SUID 的文件
复制代码 2. 按用户/组筛选
- [/code] <BASH>
- [code]find /var -user www-data # 属于 www-data 用户的文件
- find /home -group dev # 属于 dev 组的文件
复制代码 六、组合条件与逻辑操作
- -a (-and): 逻辑与(默认)
- -o (-or) : 逻辑或
- ! (-not) : 逻辑非
- 使用 () 分组(需转义)
- [/code] <BASH>
- [code]find /data \( -name "*.jpg" -o -name "*.png" \) -size +2M # 查找 JPG 或 PNG 且大于 2MB
- find . -type f ! -name "*.tmp" # 排除所有 .tmp 文件
复制代码 七、实行后续动作(-exec 与 xargs)
1. 直接实行命令(-exec)
- [/code] <BASH>
- [code]find . -name "*.bak" -exec rm -f {} \; # 删除所有 .bak 文件(确认无误后执行)
- find /var/log -type f -mtime +30 -exec gzip {} \; # 压缩 30 天前的日志文件
复制代码 2. 结合 xargs 提高效率
- [/code] <BASH>
- [code]find /tmp -name "core.*" -print0 | xargs -0 rm -f # 安全处理含空格文件名
复制代码 3. 删除文件(内建动作)
- [/code] <BASH>
- [code]find . -type f -name "*.tmp" -delete # 直接删除(-delete 必须放在最后)
复制代码 八、高级搜刮场景
1. 查找占用 inode 的小文件
- [/code] <BASH>
- [code]find /path -type f -size +0c -links 1 -exec ls -i {} \; # 非硬链接的独立文件
复制代码 2. 查找重复文件(根据 MD5)
- [/code] <BASH>
- [code]find . -type f -exec md5sum {} + | sort | uniq -w32 -dD # 生成校验和对比重复项
复制代码 九、安全排查技巧
1. 搜刮可疑 SUID/SGID 文件
- [/code] <BASH>
- [code]find / -perm /4000 -user root 2>/dev/null # SUID 且属主为 root
- find / -perm /2000 -group root 2>/dev/null # SGID 且属组为 root
复制代码 2. 查找全局可写文件
- [/code] <BASH>
- [code]find / -xdev -type f -perm -0002 ! -perm -1000 # 忽略粘滞位目录下的文件
复制代码 十、性能优化发起
- 限定搜刮深度:-maxdepth 和 -mindepth
- [/code] <BASH>
- [code]find /var/log -maxdepth 2 -name "*.log" # 仅搜索两层目录
复制代码 - 跳过特定文件系统:-xdev(不跨文件系统)
- [/code] <BASH>
- [code]find / -xdev -name "lost+found" # 仅在当前文件系统搜索
复制代码 总结
- 焦点模式:find [路径] [条件] [动作],灵活组合条件实现精准搜刮。
- 安全第一:实行删除或修改前,发起先用 -print 或 -ls 确认目标文件。
- 效率优先:在高负载场景下,尽量淘汰全盘扫描,公道使用 -xargs 提升性能。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |