find 是 Linux/Unix 系统中用于在目录树中搜索文件的强大工具,支持根据名称、类型、时间、权限等多种条件查找文件,并支持对搜索结果执行操作。以下是详细用法及示例:
基本语法
find [路径] [选项] [操作]
常用选项和示例
1. 按名称查找文件
-
-name:根据文件名(区分大小写) -
-iname:根据文件名(不区分大小写)
# 查找当前目录下所有 .txt 文件
find . -name "*.txt"
# 查找 /etc 目录下所有以 .conf 结尾的文件(不区分大小写)
find /etc -iname "*.conf"
2. 按类型查找
-
-type:指定文件类型:-
f:普通文件 -
d:目录 -
l:符号链接 -
s:套接字文件
-
# 查找 /var 目录下所有子目录
find /var -type d
# 查找当前目录下的所有符号链接
find . -type l
3. 按时间查找
-
-mtime:文件内容修改时间(单位:天)-
+n:n 天前修改 -
-n:n 天内修改
-
-
-atime:文件访问时间 -
-ctime:文件状态修改时间(如权限)
# 查找 7 天前修改过的文件
find /home -mtime +7
# 查找 1 天内被访问过的文件
find /var/log -atime -1
4. 按文件大小查找
-
-size:指定文件大小:-
+n:大于 n -
-n:小于 n -
n:等于 n - 单位:
c(字节)、k(KB)、M(MB)、G(GB)
-
# 查找大于 100MB 的文件
find / -size +100M
# 查找小于 1KB 的文件
find . -size -1k
5. 按权限/用户查找
-
-perm:按权限查找 -
-user:按文件所有者查找 -
-group:按文件所属组查找
# 查找权限为 644 的文件
find /etc -perm 644
# 查找用户 john 的所有文件
find /home -user john
6. 组合条件
-
-a:与(默认) -
-o:或 -
!:非
# 查找当前目录下所有 .log 文件且大于 1MB
find . -name "*.log" -a -size +1M
# 查找非 .txt 文件
find . ! -name "*.txt"
7. 排除目录
-
-prune:跳过指定目录
# 查找所有 .js 文件,但跳过 node_modules 目录
find . -path ./node_modules -prune -o -name "*.js" -print
8. 执行操作
-
-exec:对搜索结果执行命令(用{}表示文件名,以\;结束) -
-delete:直接删除文件 -
-print:打印结果(默认行为)
# 删除所有 .tmp 文件
find /tmp -name "*.tmp" -exec rm -f {} \;
# 将所有 .txt 文件复制到 backup 目录
find . -name "*.txt" -exec cp {} ./backup \;
# 删除空目录
find . -type d -empty -delete
9. 其他实用操作
-
-maxdepth:限制搜索深度 -
-empty:查找空文件或目录
# 仅搜索当前目录(不递归子目录)
find . -maxdepth 1 -name "*.sh"
# 查找所有空文件
find /var/log -type f -empty
综合示例
# 查找 /home 目录下用户为 john、7 天前修改过、大于 10MB 的 .mp4 文件并删除
find /home -user john -name "*.mp4" -mtime +7 -size +10M -exec rm {} \;
掌握 find 命令能极大提高文件管理效率,结合实际需求组合条件灵活使用,你就距成“神”不远了! ^ v ^ !