文章目录
在 Linux 中,find
命令是用于搜索文件和目录的核心工具,支持丰富的条件组合和操作。以下是其常见的几种使用方式及示例:
一、基本语法
find [搜索路径] [匹配条件] [执行操作]
二、常用搜索条件
1. 按名称搜索
# 查找当前目录下所有名为 "file.txt" 的文件
find . -name "file.txt"
# 使用通配符(不区分大小写)
find /home -iname "*.jpg" # -iname 忽略大小写
2. 按类型搜索
# 查找所有普通文件(-type f)
find /var/log -type f
# 查找所有目录(-type d)
find . -type d -name "docs"
3. 按时间搜索
# 查找 7 天前修改的文件
find /tmp -mtime +7
# 查找过去 24 小时内修改的文件
find ~ -mtime 0
# 查找 10 分钟内访问过的文件(-amin 访问时间,-mmin 修改时间)
find /var/cache -amin -10
4. 按大小搜索
# 查找大于 100MB 的文件
find / -size +100M
# 查找小于 1KB 的空文件
find . -size 0 -o -size -1k
5. 按权限/所有者搜索
# 查找权限为 644 的文件
find /etc -perm 644
# 查找属于用户 "nginx" 的文件
find /var -user nginx
# 查找 SUID/SGID 权限文件(安全审计)
find / -perm /4000 # SUID
find / -perm /2000 # SGID
三、组合条件(逻辑运算符)
# 查找 .log 文件且大于 10MB(-a 表示 AND)
find /var/log -name "*.log" -a -size +10M
# 查找 .txt 或 .md 文件(-o 表示 OR)
find ~ \( -name "*.txt" -o -name "*.md" \)
# 排除特定文件(! 表示 NOT)
find . ! -name "*.tmp"
四、执行操作
1. 直接输出(默认)
find . -name "*.bak" # 仅打印路径
2. 删除文件
# 删除所有 .tmp 文件(-delete 直接操作)
find /tmp -name "*.tmp" -delete
# 安全删除(确认后执行)
find ~ -name "*.log" -exec rm -i {} \;
3. 执行自定义命令
# 对所有 .txt 文件执行 ls -l
find . -name "*.txt" -exec ls -l {} \;
# 结合 xargs(处理大量文件)
find /data -name "*.csv" | xargs -I {} cp {} /backup
五、排除特定目录
# 忽略 node_modules 目录
find . -name "*.js" -not -path "*/node_modules/*"
# 跳过多个目录(-prune)
find / -type f -name "*.conf" -path "/proc/*" -prune -o -print
六、高级用法
1. 查找并压缩文件
find /backup -name "*.log" -exec gzip {} \;
2. 查找最新修改的文件
find . -type f -printf "%T@ %p\n" | sort -n | tail -1
3. 按内容搜索(结合 grep)
find . -type f -name "*.py" -exec grep -Hn "import os" {} \;
七、注意事项
- 权限问题:系统目录可能需要
sudo
权限。 - 性能优化:限制搜索范围(如
/home
替代/
)。 - 引号转义:通配符需用引号包裹(如
-name "*.txt"
)。
掌握 find
命令能显著提升文件管理效率,结合管道符(|
)和 xargs
可实现复杂操作。建议通过 man find
查看完整文档。