原理
逐个执行(-exec ... \;
)
- 原理:每找到一个匹配的文件,
find
就会启动一次指定的命令,并将该文件作为参数传递给命令。每次执行命令都是一个独立的进程。 - 示例:如果有 100 个文件匹配,
find
将启动 100 次命令,每次处理一个文件。
find . -type f -exec command {} \;
批量执行(-exec ... +
)
- 原理:
find
会收集所有匹配的文件,并将它们作为一组参数一次性传递给指定的命令。这通常只需要启动一次命令进程。 - 示例:如果有 100 个文件匹配,
find
将启动一次命令,并将这 100 个文件作为参数传递给命令。
find . -type f -exec command {} +
性能成本(Cost)
逐个执行(-exec ... \;
)
- 进程启动开销:每次找到一个文件都会启动一个新的进程,这会带来额外的系统开销。启动和关闭进程需要系统分配和释放资源。
- I/O 开销:频繁地启动和关闭进程可能会导致更多的 I/O 操作,特别是在处理大量小文件时。
批量执行(-exec ... +
)
- 进程启动开销:只需启动一次进程,因此大大减少了系统分配和释放资源的次数。
- I/O 开销:减少了频繁的 I/O 操作,因为所有匹配的文件一次性传递给命令处理。