#!/usr/bin/perl use strict; use warnings; use File::Find; sub preprocess { my %packages; foreach (@_) { $_ =~ m/^([^_]+)/; push @{$packages{$1}}, $_; } @_ = (); foreach ( keys %packages ) { my @packages = @{$packages{$_}}; push @_, (sort @packages)[0 .. scalar @packages - 3]; } return @_; } find({ preprocess => \&preprocess, wanted => sub { print "$File::Find::name\n" } }, '/var/cache/apt/archives');