Linux find 命令完全指南
强大的文件查找工具 · 精准定位文件
find [路径] [选项] [表达式]
一、find 是什么?
find 是 Linux/Unix 系统中用于在目录树中查找文件的命令。它可以根据文件名、大小、修改时间、权限等多种条件来搜索文件,是系统管理和日常使用中不可或缺的工具。
find 不仅能查找文件,还能对找到的文件执行操作,如删除、复制、移动等,实现批量处理。
二、基础语法
find [搜索路径] [选项] [表达式]find /home -name "*.txt" 查找 txt 文件find . -type f -name "*.log" 查找日志文件find / -size +100M 查找大于100M的文件find . -mtime -7 查找7天内修改的文件
三、按名称查找
find -name "filename" 精确查找find -name "*.txt" 扩展名查找find -name "file*" 通配符查找find -iname "FILE" 忽略大小写find -regex ".*\.txt$" 正则表达式find -not -name "*.log" 排除匹配
四、按类型查找
find -type f 普通文件find -type d 目录find -type l 符号链接find -type b 块设备find -type c 字符设备find -type p 管道
五、按时间查找
find -mtime -7 7天内修改find -mtime +30 30天前修改find -atime -1 1天内访问find -ctime -3 3天内属性改变find -newer file.txt 比file更新find -mmin -30 30分钟内修改
六、按大小查找
find -size 100M 正好100Mfind -size +100M 大于100Mfind -size -10M 小于10Mfind -size +1G 大于1Gfind -size +100k 大于100kfind -empty 空文件
七、按权限查找
find -perm 644 权限为644find -perm -644 包含644权限find -user tom 所有者为tomfind -group admin 所属组为adminfind -uid 1000 UID为1000find -gid 1000 GID为1000
八、对找到的文件执行操作
find -name "*.log" -delete 删除找到的文件find -name "*.txt" -exec rm {} \; 删除(确认)find -name "*.txt" -exec ls -l {} \; 列出详情find -name "*.log" -exec cat {} > all.log \; 合并find -name "*.txt" -print0 | xargs -0 处理空格文件名find -name "*.sh" -exec chmod +x {} \; 添加执行权限
九、实战示例
9.1 查找大文件
find / -type f -size +100M 2>/dev/nullfind /home -type f -size +50M -lsfind . -type f -size +1G | head -20
9.2 清理日志
find /var/log -name "*.log" -mtime +30 -deletefind /var/log -name "*.log" -mtime +7 -exec rm {} \;find . -name "*.log" -empty -delete
9.3 查找特定文件
find / -name "my.cnf" 2>/dev/nullfind /etc -name "php.ini"find . -name "*.conf" -path "*/apache/*"find / -type f -name "*.php" | grep -i config
9.4 批量处理
find . -name "*.jpg" -exec convert {} -resize 50% {} \;find . -type f -name "*.sh" -exec chmod +x {} \;find . -name "*.txt" -exec dos2unix {} \;
十、常见问题
Q: 搜索目录太深速度慢? A: 使用 -maxdepth 限制深度,如:find . -maxdepth 3
Q: 文件名有空格怎么办? A: 使用 -print0 和 xargs -0,如:find . -print0 | xargs -0 ls
Q: 权限不足怎么办? A: 在命令后加 2>/dev/null 忽略错误,或使用 sudo
💡 经验总结
1. -name 支持通配符,-regex 支持正则 2. -exec 是强大功能,但要注意转义 3. 结合管道和 xargs 处理复杂操作 4. -delete 删除前先确认