use Getopt::Long; use File::Glob; use strict; use warnings; my $ext = 'csc'; GetOptions( 'ext=s' => \$ext, ); my $unl; for my $dir ( @ARGV ) { my %f; /(.*)\.(.*)/ and $f{$1}{$2} = $_ for File::Glob::bsd_glob( "$dir/*" ); for my $g ( grep { $f{$_}{$ext} and keys %{$f{$_}} > 1 } keys %f ) { delete $f{$g}{$ext}; $unl += unlink $f{$g}{$_} for sort keys %{ $f{$g} }; } } print "\n$unl files unlinked.\n";