使用 Perl 删除除最新缓存文件外的所有文件
Delete All But Newest Cache File using Perl
我有一个 Perl 子例程,可以自动缩小和缓存 JavaScript 和 CSS 文件。为了解决浏览器缓存问题,它将当前的纪元时间放在提供给浏览器的缓存文件的名称之前,例如1625006582-weather.css
.
我最初的计划是在创建新缓存之前立即使用 unlink </path/to/cache/*-weather.css>
删除所有旧副本。然而,这意味着有一个时刻,尽管它可能很微小,但没有任何副本是公开可用的(更长,如果新版本的创建失败)。
所以,我想做的是找出最有效的方法,通过删除 *-weather.css
minus 来清理我的维护脚本最近的副本。我想我可以遍历目录,然后一次取消一个链接,直到我到达最后一个匹配项,但不知何故我怀疑有一种更有效的方法来做到这一点。有吗?
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);
我有一个 Perl 子例程,可以自动缩小和缓存 JavaScript 和 CSS 文件。为了解决浏览器缓存问题,它将当前的纪元时间放在提供给浏览器的缓存文件的名称之前,例如1625006582-weather.css
.
我最初的计划是在创建新缓存之前立即使用 unlink </path/to/cache/*-weather.css>
删除所有旧副本。然而,这意味着有一个时刻,尽管它可能很微小,但没有任何副本是公开可用的(更长,如果新版本的创建失败)。
所以,我想做的是找出最有效的方法,通过删除 *-weather.css
minus 来清理我的维护脚本最近的副本。我想我可以遍历目录,然后一次取消一个链接,直到我到达最后一个匹配项,但不知何故我怀疑有一种更有效的方法来做到这一点。有吗?
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);