find
是 Linux 下功能强大的文件搜索工具,支持按名称、类型、大小、时间、权限等条件查找文件,并能对搜索结果执行操作。以下是详细说明:
基本语法
find [搜索路径] [表达式]
- 搜索路径:默认为当前目录(
.
),可指定多个路径。 - 表达式:由选项、测试条件、操作组成,决定搜索规则。
常用参数分类
1. 按文件名查找
-name "模式"
:按文件名匹配(区分大小写)。find /home -name "*.txt" # 查找 /home 下所有 .txt 文件
-iname "模式"
:不区分大小写的文件名匹配。find . -iname "readme.md" # 查找 README.md、Readme.MD 等
2. 按文件类型查找
-type [类型标识符]
:按文件类型筛选。find /var -type d # 查找所有目录 find ~ -type f # 查找普通文件 find / -type l # 查找符号链接
常见类型:
f
(文件)、d
(目录)、l
(链接)、b
(块设备)、s
(套接字)等。
3. 按文件大小查找
-size [+/-]大小单位
:按文件大小筛选。find . -size +10M # 查找大于 10MB 的文件 find /tmp -size -5k # 查找小于 5KB 的文件
单位:
c
(字节)、k
(KB)、M
(MB)、G
(GB)。
4. 按时间查找
按天数:
-atime [+/-]n
:访问时间(access)。-mtime [+/-]n
:内容修改时间(modify)。-ctime [+/-]n
:状态修改时间(change,如权限)。
find /var/log -mtime -7 # 查找 7 天内修改过的文件 find ~ -atime +30 # 查找 30 天前访问过的文件
按分钟数(更精确):
-amin
,-mmin
,-cmin
,用法同上。
find /etc -mmin -60 # 查找 1 小时内修改过的文件
5. 按权限查找
-perm [权限模式]
:匹配文件权限。find . -perm 644 # 查找权限为 644 的文件 find /usr/bin -perm /u=x # 查找用户有执行权限的文件
组合条件
逻辑运算符:
-a
或-and
:与(默认)。-o
或-or
:或。!
或-not
:非。
find /home -type f -size +1M # 查找大于 1MB 的普通文件 find . \( -name "*.sh" -o -name "*.py" \) # 查找 .sh 或 .py 文件 find /etc ! -user root # 查找不属于 root 的文件
对搜索结果执行操作
-exec [命令] \;
:对查找到的文件执行命令({}
表示文件名)。find /tmp -type f -mtime +7 -exec rm {} \; # 删除 7 天前的文件
-ok [命令] \;
:交互式执行(需确认)。批量处理技巧:
find . -name "*.log" -print0 | xargs -0 gzip # 压缩所有 .log 文件(处理含空格的文件名)
排除特定目录
使用
-prune
跳过不需要搜索的目录:find / -path "/proc" -prune -o -name "*.conf" # 查找所有 .conf 文件,但跳过 /proc 目录
常用示例
按名称查找:
find /etc -name "nginx.conf"
按类型查找:
find ~ -type f -empty # 查找空文件
按大小清理文件:
find /var/log -size +100M -exec ls -lh {} \; # 列出超过 100MB 的文件
按时间备份:
find /data -mtime -1 -exec tar -czvf backup.tar.gz {} +
按权限修复:
find /webroot -type f ! -perm 644 -exec chmod 644 {} \; # 修改非 644 权限的文件
注意事项
- 使用
-delete
删除文件时需谨慎,建议先替换为-ls
或-print
预览结果。 - 处理文件名含空格或特殊字符时,建议用
-print0
和xargs -0
组合。
掌握这些用法后,find
将成为你管理文件的得力工具!