#!/usr/local/bin/perl #< LICENSE: WTFPL > use warnings; use strict; use Digest::SHA1; my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); my @days = qw(Sun Mon Tue Wed Thu Fri Sat Sun); #< Config START > my $scan_dir = '/xxxxxxxxxxxxxxxxxxxxxx/sf-download/'; my $base_dlurl = 'https://www.privoxy.org/sf-download-mirror/'; my $save_rss_file ='/xxxxxxxxxxxxxxxxxxxxxx/release.xml'; # e.g., release.rss my $maxlimit = 10; #< Config END > my @Array = (); my $i = 0; my $sec; my $min; my $hour; my $mday; my $mon; my $year; my $wday; my $yday; my $isdst; my $target; my $target_sha1; my $target_uri; my $target_time; my $target_line; # # 1st & 2nd directory should NOT contain ANY 'FILES'. (expecting only 'Directory') # opendir(D1, $scan_dir) or die "Can't open 1st directory! /"; MOUT: while (my $fi1 = readdir(D1)) { next if ($fi1 =~ m/^\./); opendir(D2, $scan_dir . $fi1 . '/') or die "Can't open 2nd directory! /$fi1"; while (my $fi2 = readdir(D2)) { next if ($fi2 =~ m/^\./); ## start listing /OS/Version/FILE opendir(D3, $scan_dir . $fi1 . '/' . $fi2 . '/') or die "Can't open 3rd directory! /$fi1/$fi2"; while (my $fi3 = readdir(D3)) { next if ($fi3 =~ m/^\./); $target = $scan_dir . $fi1 . '/' . $fi2 . '/' . $fi3; next if (!-e $target); # skip if file is not exist # Get SHA-1 hash my $filedata; unless (open $filedata, $target) { next; } my $sha1 = Digest::SHA1->new; $sha1->addfile($filedata); close $filedata; $target_sha1 = $sha1->hexdigest; # URI and Time $target_uri = $fi1 . '/' . $fi2 . '/' . $fi3; $target_time = (stat $target)[9]; # RSS line $target_line = '<![CDATA[' . $target_uri . ']]>'; $target_line .= ''; $target_line .= '' . $base_dlurl . $target_uri . '' . $base_dlurl . $target_uri . ''; $target_line .= ''; ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime($target_time); $target_line .= "$days[$wday], $mday $months[$mon] " . ($year + 1900) . " $hour:$min:$sec GMT"; $target_line .= ''; # Add it to Array $Array[$i] = ([$target_time, $target_line]); $i++; if ($i >= $maxlimit) { last MOUT; } } closedir D3; ## end listing /OS/Version/FILE } closedir D2; } closedir D1; # Result = Full XML Codes my $result = 'Privoxy Releaseshttps://www.privoxy.org/announce.txt'; ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime(); $result .= "$days[$wday], $mday $months[$mon] " . ($year + 1900) . " $hour:$min:$sec GMT"; $result .= ''; # Sort Array my @resArray = sort { @$a[0] <=> @$b[0] } @Array; $i--; while ($i >= 0) { $result .= $resArray[$i][1]; $i--; } $result .= ''; # Save it. open(XMLF, "> $save_rss_file") or die "Failed to write XML file"; print XMLF $result; close(XMLF);