Я пытаюсь написать Perl-скрипт, который может открыть каталог и удалить дубликаты файлов, сравнив часть их имен и дату изменения.Я основал часть своего кода, используя алгоритм пузырьковой сортировки.
Проблема, с которой я сталкиваюсь, заключается в следующем: test12345.log
, test34333.log
, mytest11111.log
, mytest22222.log
и т. Д.Мне нужно удалить числовые значения в конце имени файла, а затем просто сравнить оставшиеся имена и дату изменения.test
и test
являются дубликатами, но какая из них имеет более старую измененную дату, поэтому я могу удалить ее?
Вот что я уже написал:
#!D:\Perl\bin\perl
opendir (DIR,".");
@array = grep(/.log/,readdir(DIR));
closedir (DIR);
foreach(@array){
s/[0-9]{1}.log$//g;
}
dlete(\@array);
sub dlete {
my $array = shift;
my $not_complete = 1;
my $index;
my $len = ((scalar @$array) - 2);
while ($not_complete) {
$not_complete = 0;
foreach $index (0 .. $len) {
if (@$array[$index] eq @$array[$index+1] && -M @$array[$index] > -M @$array[$index + 1]) {
unlink "@$array[$index]";
$not_complete = 1;
}
}
}
}
Вопрос, который я задаю, выше кодировки.Я пытаюсь удалить дубликаты файлов из каталога, сравнивая их имена и дату изменения.Однако проблема в том, что имена файлов выглядят так: test12345.log, test34333.log mytest11111.log, mytest22222.log и т. Д. Мне нужно удалить числовые значения в конце имени файла, а затем просто сравнитьоставшиеся имена и дата изменения.например, test и test являются дубликатами, но у которых более старая модифицированная дата, поэтому я могу удалить ее