使用Perl删除除最新缓存文件外的所有缓存文件



我有一个Perl子例程,它可以自动缩小和缓存JavaScript和CSS文件。为了解决浏览器缓存问题,它将当前Epoch时间放在提供给浏览器的缓存文件的名称之前,例如1625006582-weather.css

我最初的计划是在创建新缓存之前立即使用unlink </path/to/cache/*-weather.css>删除任何旧副本。然而,这意味着有一个时刻,尽管可能很轻微,但没有副本是公开的(如果新版本的创建失败,则时间会更长(。

因此,我想做的是找出最有效的方法来稍后清理我的维护脚本,删除*-weather.css减去最新的副本。我想我可以遍历目录,然后一次取消一个链接,直到达到最后一个匹配,但不知何故,我怀疑有更有效的方法可以做到这一点。有吗?

chdir($fullpath);
@files = glob("*-weather.css");
for (my $I; $I++; $I > $#files) {
unlink ($fullpath . $files[$I]);
}

不能保证最新的文件是glob返回的第一个文件。

use Sort::Key::Natural qw( natsort );
my @qfns = natsort glob("*-weather.css");
pop(@qfns);  # We don't want to delete the newest.
unlink(@qfns);

最新更新