在我的 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
版本在多处理器系统上仍然会运行得稍快(几个百分点),因为某些工作可以并行化。如果涉及大量计算,则尤其如此。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)