Этот скрипт perl находит все файлы, начиная с текущего каталога. Затем он помещает их в хеш, где базовое имя файла является ключом, а значение - парой (размер, полный путь). Затем он перебирает базовые имена, сортирует дубликаты и удаляет все, кроме самого большого.
Фактический / bin / rm закомментирован. Убедитесь, что это делает то, что вы хотите, прежде чем делать это по-настоящему.
Настоящие Perl-хакеры: если я делаю что-то наивное / глупое, я бы с удовольствием узнал об этом.
#!/usr/bin/perl -w
use File::Basename;
use strict;
my @files = `/usr/bin/find -type f`;
my %stats;
# each hash key is the simple basename of the files
# each hash value is a 2 element array of (size, fullpath)
foreach my $file (@files)
{
chomp($file);
my $result = `/bin/ls -s $file`;
chomp($result);
if($result =~ /^(\d+)\s+(.*)/)
{
my ($basefile, $dir, $suffix) = fileparse($file);
push(@{$stats{$basefile}}, [$1, $2]);
}
else
{
printf STDERR "Unexpected ls output: $result\n";
}
}
foreach my $file (keys %stats)
{
# sort from smallest to largest
my @sorted = sort {$b->[0] <=> $a->[0]} @{$stats{$file}};
# remove the biggest one
pop(@sorted);
# for each one that's left remove it (use at your own risk!)
foreach my $path (@sorted)
{
# system("/bin/rm $path");
printf "/bin/rm $path->[1]\n";
}
}