Linux系统 find命令 高级用法
终于有人把Linux系统 find命令 高级用法讲透了Linux find 命令高级用法全总结一、基础语法find [搜索路径] [匹配条件] [执行动作]核心逻辑遍历目录树按条件筛选文件再对结果执行操作。二、常用高级筛选条件1. 按时间筛选运维日志清理高频单位min分钟、time天a访问、m内容修改、c属性变更# 1. 7天前修改的日志删除过期日志find /var/log -type f -mtime 7# 2. 240分钟内访问过的文件find /tmp -atime -240# 3. 恰好30分钟前修改find . -mmin 30# 4. 对比-newer 比指定文件更新find . -type f -newer test.log2. 按文件大小筛选单位c字节、kKB、MMB、GGB# 大于100M的文件排查磁盘占用find /data -type f -size 100M# 小于10k的空小文件find . -size -10k# 等于500字节find . -size 500c3. 按权限、属主、属组# 全局查找777权限危险文件find / -type f -perm 0777# 包含w权限任意用户可写find . -perm /222# 查找root拥有的文件find /home -user root# 查找组为nginx的日志find /var/log/nginx -group nginx# 无属主/无属组磁盘迁移残留文件find . -nouser -o -nogroup4. 按名称、后缀、正则匹配# 通配符匹配日志-name区分大小写-iname忽略大小写find . -iname *.log# 排除目录匹配find /data -type f -name backup_*.tar.gz# 正则高级匹配匹配数字结尾txtfind . -regex .*/[0-9]\.txt# 排除指定目录过滤node_modules、gitfind . -path ./node_modules -prune -o -name *.js -print5. 按文件类型f普通文件、d目录、l软链、s套接字、b/c设备# 只找目录find . -type d# 只找软链接find /etc -type l# 查找空文件/空目录find . -type f -emptyfind . -type d -empty三、核心高级执行动作重点1. -print0 xargs -0 解决文件名含空格/特殊字符生产必备普通管道|xargs遇空格文件名会拆分报错-print0用null分隔# 批量删除带空格的过期日志find . -name *.log -mtime 3 -print0 | xargs -0 rm -f# 批量替换文件内容find . -name *.conf -print0 | xargs -0 sed -i s/old/new/g2. -exec 直接执行命令两种写法{}代表匹配到的文件\;结束合并参数减少进程# 写法1逐个执行适合单文件操作find . -type f -name *.tmp -exec rm {} \;# 写法2合并批量执行性能更高推荐find /var/log -mtime 15 -type f -exec rm {} # 批量修改文件权限find . -type f -exec chmod 644 {} find . -type d -exec chmod 755 {} # 复制匹配文件到备份目录find . -name *.csv -exec cp {} /data/backup \;3. -delete 快速删除简化版-exec rm# 删除7天前日志慎用先去掉-delete打印确认find /var/log/app -name *.log -mtime 7 -delete# 删除空目录find . -type d -empty -delete4. -ls / -printf 自定义输出格式# 类ls长格式展示文件find . -name *.tar -ls# 自定义输出权限 大小 修改时间 路径find . -type f -printf %m %8s %TY-%Tm-%Td %p\n# 只输出文件名不带路径find /data -type f -printf %f\n四、多条件逻辑组合•-aAND默认可省略•-oOR•!取反# 匹配log或txt文件find . -name *.log -o -name *.txt# 不是git目录的文件find . ! -path */.git/* -type f# 大于100M 且 30天前的压缩包find /backup -type f -name *.gz -size 100M -a -mtime 30五、运维高频实战场景\1.磁盘清理批量删除过期日志find /usr/local/tomcat/logs -type f -name *.log -mtime 7 -print0 | xargs -0 rm -f\2.安全巡检全网777权限文件find / -type f -perm 0777 2/dev/null\3.统计大文件定位磁盘爆满find / -type f -size 500M -printf %s %p\n 2/dev/null | sort -nr\4.批量查找替换配置文件内容find . -name *.properties -print0 | xargs -0 sed -i s/127.0.0.1/192.168.1.100/g\5.过滤隐藏目录检索业务代码find . \( -path ./.git -o -path ./node_modules \) -prune -o -name *.java -print六、避坑关键点\1. 根目录/搜索加2/dev/null屏蔽权限拒绝报错\2. 文件名含空格、中文、括号必须用-print0 | xargs -0\3. 删除操作先去掉-delete/-exec rm打印文件确认再执行\4.-prune放在-o前才能真正排除目录\5.-exec {} 比\;性能更强批量操作优先使用。