1. 基本作用
-exec 用来对 find 找到的每个文件 执行指定的命令。 语法是:
find <路径> <条件> -exec <命令> {} \;
解释:
-
{}→ 代表当前找到的文件(一个一个替换进去) -
\;→ 表示命令结束(;需要转义,避免被 shell 提前解释)
2. 基本示例
查找并删除:
find . -type f -name "*.log" -exec rm {} \;
找到当前目录所有 .log 文件,并逐个执行 rm 文件名。
查找并显示详细信息:
find /etc -type f -name "*.conf" -exec ls -l {} \;
找到 etc 下的 .conf 文件,并对每个执行 ls -l 文件名。
3. \; 与 + 的区别
-
\;:一个文件执行一次命令,效率低。 -
+:多个文件一起执行命令(批量),效率高。
示例:
# 每个文件执行一次 ls -l
find . -type f -exec ls -l {} \;
# 批量把所有找到的文件交给 ls -l 一次执行
find . -type f -exec ls -l {} +
如果命令支持一次处理多个文件,用 + 更快。
4. 常见用法
删除 30 天前的日志:
find /var/log -type f -mtime +30 -exec rm -f {} \;
移动文件到备份目录:
find ./data -type f -name "*.csv" -exec mv {} /backup/csv/ \;
批量替换权限:
find /var/www -type f -exec chmod 644 {} \;
find /var/www -type d -exec chmod 755 {} \;
压缩找到的.txt文件:
find ./ -name "*.txt" -exec tar -rvf texts.tar {} \;
📌 两种写法对比
逐个执行(慢)
find . -type f -exec ls -l {} \;
流程:
-
每找到 1 个文件 → 执行 1 次命令
-
找到 1000 个文件 → 共执行 1000 次命令
批量执行(快)
find . -type f -exec ls -l {} +
流程:
-
找到多个文件 → 一次性传给命令
-
找到 1000 个文件 → 可能只执行几次命令
📌 交互式执行
find . -type f -ok rm {} \;
流程:
-
找到文件 → 提示
rm ... ? -
输入
y执行,n跳过
797

被折叠的 条评论
为什么被折叠?



