在我的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版本会稍快一些,因为您不会为每个文件名生成一个进程。但是,如果实际上有很大的不同,我会感到惊讶。如果您担心xargs发送给rm每次调用的长列表,则可以将-l与xargs一起使用以限制它将使用的令牌数量。但是,xargs知道最长的cmdline长度,并且不会超出该长度。
与您发布时的-exec版本相比,具有许多文件的xargs版本具有显着更快的速度,这是因为rm
被执行了[[每个文件一次],而xargs将集结了许多文件一起合并到单个rm
命令中。
您可以通过使用-+而不是“ \;”结束命令来使用-exec获得相同的行为。
此选项仅在find
的较新版本中可用。>以下两个大致等效:
find . -print0 | xargs -0 rm
find . -exec rm \{} +
请注意,xargs
版本在多处理器系统上仍会稍快一些(百分之几),因为某些工作可以并行化。如果涉及大量计算,则尤其如此。