Compare Pastes

Differences between the pastes #269673 (25.05.2023 20:51) and #276148 (18.07.2024 10:08).
1
#!/usr/bin/env perl
2
use strict;
3
use warnings;
4
use version;
5
use Data::Dumper;
6
7
my $DIR_OPT = "/usr/home/portage/x86_64/";
8
my @dirs;
9
my @pkgs;
10
my @remove;
11
my @skipped;
12
1
Спа девичник в Москве: 
2
Заполните форму, и мы свяжемся с Вами в ближайшее время http://bud707.ru/product/подарочный-сертификат-на-сумму-2880р-2/
3
 
4
от 2 часов 30 мин http://bud707.ru/product/подарочный-сертификат-на-сумму-55000р/
5
 
6
Продолжительность СПА-девичника: 2-3 часа http://bud707.ru/product/4208/
7
 
8
120 мин http://bud707.ru/product/4829/
9
  Массаж лица и тела Рутуал для рук и ног http://bud707.ru/product/копировать-23/
10
 
11
Спа девичник http://bud707.ru/product-category/спа-свидания/
12
 
13
if ( opendir( DIR, $DIR_OPT ) ) {
14
        @dirs = grep -d "$DIR_OPT/$_", readdir DIR;
15
        closedir( DIR );
16
}
17
18
foreach my $dir ( @dirs ) {
19
        next if ( $dir eq "." );
20
        next if ( $dir eq ".." );
21
        if ( opendir( DIR, $DIR_OPT."/".$dir ) ) {
22
                @pkgs = readdir DIR; 
23
                closedir( DIR );
24
                @pkgs = grep {!/(^\.$|^\.\.$)/} @pkgs;
25
                my $pkgver = {};
26
                foreach ( @pkgs ) {
27
                        my ($pname, $pver, $prev) = ($_ =~ /(.*)\-([\d\._]+)(\-r\d+)?\.tbz2/i);
28
                        if ( ! defined $pname ) {
29
                                push @skipped, "$DIR_OPT$dir/$_";
30
                                next;
31
                        }
32
                        $prev = "-r0" if ( ! defined $prev );
33
                        $prev =~ s/-r//;
34
                        print "-- $_ parsed as $pname, $pver, $prev\n";
35
                        if ( ! defined $pkgver->{$pname} ) {
36
                                $pkgver->{$pname}[0] = $pver;
37
                                $pkgver->{$pname}[1] = $prev;
38
                                next;
39
                        }
40
                        print "Found twin for $pname ($_)\n";
41
                        if ( version->parse($pkgver->{$pname}[0]) > version->parse( $pver ) ) {
42
                                push @remove, "$DIR_OPT$dir/$_";
43
                                next;
44
                        }
45
                        if ( version->parse($pkgver->{$pname}[0]) == version->parse( $pver ) && $pkgver->{$pname}[1] >= $prev ) {
46
                                next if ( $pkgver->{$pname}[1] >= $prev ); # same prog, miracle, just skip it
47
                                push @remove, "$DIR_OPT$dir/$_";
48
                                next;
49
                        }
50
                        $pkgver->{$pname}[0] = $pver;
51
                        $pkgver->{$pname}[1] = $prev;
52
                        $prev = "-r".$prev;
53
                        $prev = "" if ( $prev eq "-r0" );
54
                        push @remove, "$DIR_OPT$dir/$pname-$pver$prev.tbz2";
55
                }
56
        }
57
}
58
unlink @remove;
59
#print Dumper(@remove);