gpt4 book ai didi

shell - 'find -exec' 或 'find | xargs -0' 哪个更快?

转载 作者:行者123 更新时间:2023-12-04 09:13:04 25 4
gpt4 key购买 nike

在我的 Web 应用程序中,我使用 PHP 脚本呈现页面,然后从中生成静态 HTML 文件。向用户提供静态 HTML 以提高性能。 HTML 文件最终会变得陈旧,需要删除。

我正在辩论两种编写驱逐脚本的方法。

第一种是使用单个 find 命令,例如

find /var/www/cache -type f -mmin +10 -exec rm \{} \;

第二种形式是通过管道通过 xargs,类似于
find /var/www/cache -type f -mmin +10 -print0 | xargs -0 rm

第一种形式调用 rm对于它找到的每个文件,而第二种形式只是将所有文件名发送到单个 rm (但文件列表可能很长)。

哪种形式会更快?

在我的例子中,缓存目录在几个 Web 服务器之间共享,所以这都是通过 NFS 完成的,如果这对这个问题很重要。

最佳答案

xargs 版本在处理大量文件时比 -exec 版本快得多,这是因为 rm对于要删除的每个文件执行一次,而 xargs 会将尽可能多的文件合并为一个 rm命令。

对于数以万计或数十万个文件,可能是一分钟或更短时间与一小时的大部分时间之间的差异。

您可以通过使用“+”而不是“\;”来结束命令,从而获得与 -exec 相同的行为。 此选项仅适用于较新版本的 find .

以下两个大致等效:

find . -print0 | xargs -0 rm
find . -exec rm \{} +

请注意 xargs版本在多处理器系统上的运行速度仍然会稍微快一些(几个百分点),因为一些工作可以并行化。如果涉及大量计算,则尤其如此。

关于shell - 'find -exec' 或 'find | xargs -0' 哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/980411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com