Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 5.82 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. use feature ":5.10";
  4. use strict;
  5. use warnings;
  6. use File::Find;
  7. use File::Basename;
  8. use Term::ANSIColor;
  9. use Cwd;
  10.  
  11. my @allfiles;
  12.  
  13. main();
  14.  
  15. sub main {
  16.     my @rarfirstpart;
  17.     my @rarall;
  18.     my @chksumfile;
  19.     my @notrar;
  20.    
  21.     find (\&wanted, ".",);
  22.     #remove dot element
  23.     shift @allfiles;
  24.    
  25.     #Regexp::Assemble was used
  26.     foreach my $filename ( @allfiles ) {
  27.         my $justname = fileparse("$filename", qr/\.[^.]*/);
  28.         my $rar_present =  qr/$justname\.(?:RAR|rar)$/ ~~ @allfiles;
  29.         given ( $filename ) {
  30.             when ( /\.(?:RAR|rar)$/ ) {
  31.                 unless ( /\.part/ && not /\.part0{0,2}1\.rar$/ ) {
  32.                     push @rarfirstpart, $filename;
  33.                     push @rarall, $filename;
  34.                 }
  35.                 else {
  36.                     push @rarall, $filename;
  37.                 }
  38.             }
  39.             when ( /\.r\d{0,3}$/ || ( /\.\d{0,3}$/ && rar_check($filename) ) ) {
  40.                 if ( /\.r?0{0,3}$/ && not $rar_present ) {
  41.                     push @rarfirstpart, $filename;
  42.                     push @rarall, $filename;
  43.                 }
  44.                 elsif ( /\.r?0{0,2}1$/ && not qr/$justname\.r?0{0,3}$/ ~~ @allfiles ) {
  45.                     push @rarfirstpart, $filename;
  46.                     push @rarall, $filename;
  47.                 }
  48.                 else {
  49.                     push @rarall, $filename;
  50.                 }
  51.             }
  52.             when ( /\.(?:SFV|sfv)$/ && qr/$justname\.(?:r(?:\d{0,3}|ar)|\d{0,3}|RAR)$/ ~~ @allfiles ) {
  53.                 push @chksumfile, $filename;
  54.             }
  55.             default {
  56.                 push @notrar, $filename;
  57.             }
  58.         }
  59.     }
  60.    
  61.     if ( @chksumfile ) {
  62.         print colored "Checksum Files -\n", 'bold white';
  63.         foreach my $chkfile ( @chksumfile ) {
  64.             print "\t" . basename($chkfile) . "\n";
  65.         }
  66.         print colored "\n____________________________________________________\n", 'bold white';
  67.         print "Perform checksum ?\t\t\t\t\t\t[";
  68.         print colored "y ", 'bold green';
  69.         print "/";
  70.         print colored " n", 'bold red';
  71.         print "]\n";
  72.         my $accept = <>;
  73.         if ( $accept =~ /[Yy]/ ) {
  74.             checksum(@chksumfile);
  75.         }
  76.     }
  77.    
  78.     print colored "**********************UNRARING**********************\n", 'bold red';
  79.     if ( @rarfirstpart ) {
  80.         print colored "\n\t" . basename($_) . "\n", 'green' for @rarfirstpart;
  81.         print colored "\n****************************************************\n", 'bold red';
  82.         print "unrar ?\t\t\t\t\t\t\t\t[";
  83.         print colored "y ", 'bold green';
  84.         print "/";
  85.         print colored " n", 'bold red';
  86.         print "]\n";
  87.         my $accept = <>;
  88.         if ( $accept =~ /[Yy]/ ) {
  89.             unrar_all(@rarfirstpart);
  90.         }
  91.         else {
  92.             print colored "Aborting user chose no\n", 'bold yellow';
  93.         }
  94.     }
  95.     else {
  96.         print colored "NO RAR FILES PRESENT ABORTING...\n\n", 'yellow';
  97.         print colored "\n****************************************************\n", 'bold red';
  98.         exit 0;
  99.     }
  100.    
  101.     print colored "\n\nDeleting Files -\n", 'bold red';
  102.     print colored basename($_) . "\n", 'bold white on_red' for @rarall;
  103.     print colored "\n____________________________________________________\n\n\n\n", 'bold red';
  104.     print colored "Leaving Files -\n", 'bold green';
  105.     print colored "\t" . basename($_) . "\n", 'yellow' for @notrar;
  106.     print colored "\n____________________________________________________\n", 'bold green';
  107.     print "unlink ?\t\t\t\t\t\t\t[";
  108.     print colored "y ", 'bold green';
  109.     print "/";
  110.     print colored " n", 'bold red';
  111.     print "]\n";
  112.     my $accept = <>;
  113.     if ( $accept =~ /[Yy]/ ) {
  114.         foreach my $file ( @rarall ) {
  115.             unlink $file or warn "Could not unlink $file: $!";
  116.         }
  117.     }
  118.     else {
  119.         print colored "Aborting user chose no\n", 'bold yellow';
  120.         exit 0;
  121.     }
  122. }
  123.  
  124. sub wanted {
  125.     push @allfiles, $File::Find::name;
  126. }
  127.  
  128. sub checksum {
  129.     my @chksumfile = @_;
  130.     my $error;
  131.     foreach my $chkfile ( @chksumfile ) {
  132.         if ( execdir("cfv", "-f", $chkfile) ) {
  133.             ++$error;
  134.         }
  135.     }
  136.     if ( $error ) {
  137.         print colored "$error", 'bold red';
  138.         print "/";
  139.         print colored scalar(@chksumfile), 'bold red';
  140.         print " checksums failed\n";
  141.         print "\nContinue ?\t\t\t\t\t\t\t[";
  142.         print colored "y ", 'bold green';
  143.         print "/";
  144.         print colored " n", 'bold red';
  145.         print "]\n";
  146.         my $accept = <>;
  147.         if ( $accept =~ /[Nn]/ ) {
  148.             print colored "Aborting user chose no\n", 'bold yellow';
  149.             exit 0;
  150.         }
  151.     }
  152. }
  153.  
  154. sub unrar_all {
  155.     my @rarfirstpart = @_;
  156.     my @didntextract;
  157.     foreach my $rarfile ( @rarfirstpart ) {
  158.         if ( execdir("unrar", "x", $rarfile) ) {
  159.             push @didntextract, $rarfile;
  160.         }
  161.     }
  162.     if ( @didntextract ) {
  163.         print colored "\nFINISHED WITH ERRORS: Could not unrar -\n", 'white on_red';
  164.         print basename($_) . "\n" for @didntextract;
  165.         print "\n";
  166.     }
  167. }
  168.  
  169. sub execdir {
  170.     my ($cmd, $ops, $filename) = @_;
  171.     my $working_dir = getcwd;
  172.     ($filename, my $dir) = fileparse($filename);
  173.     chdir $dir;
  174.     my @args = ($cmd, $ops, $filename);
  175.     system(@args);
  176.     my $exit_value  = $? >> 8;
  177.     chdir $working_dir;
  178.     if ( $exit_value ) {
  179.         return 1;
  180.     }
  181.     else {
  182.         return 0;
  183.     }
  184. } #to use do execdir("cmd", "-ops", "/dir/file");
  185.  
  186. sub rar_check {
  187.     my ($file) = @_;
  188.     open(FILETYPE, "file $file|");
  189.     my $filetype = <FILETYPE>;
  190.     close(FILETYPE);
  191.     if ( $filetype =~ /.RAR archive data./ ) {
  192.         return 1;
  193.     }
  194.     else {
  195.         return 0;
  196.     }
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement