Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use feature ":5.10";
- use strict;
- use warnings;
- use File::Find;
- use File::Basename;
- use Term::ANSIColor;
- use Cwd;
- my @allfiles;
- main();
- sub main {
- my @rarfirstpart;
- my @rarall;
- my @chksumfile;
- my @notrar;
- find (\&wanted, ".",);
- #remove dot element
- shift @allfiles;
- #Regexp::Assemble was used
- foreach my $filename ( @allfiles ) {
- my $justname = fileparse("$filename", qr/\.[^.]*/);
- my $rar_present = qr/$justname\.(?:RAR|rar)$/ ~~ @allfiles;
- given ( $filename ) {
- when ( /\.(?:RAR|rar)$/ ) {
- unless ( /\.part/ && not /\.part0{0,2}1\.rar$/ ) {
- push @rarfirstpart, $filename;
- push @rarall, $filename;
- }
- else {
- push @rarall, $filename;
- }
- }
- when ( /\.r\d{0,3}$/ || ( /\.\d{0,3}$/ && rar_check($filename) ) ) {
- if ( /\.r?0{0,3}$/ && not $rar_present ) {
- push @rarfirstpart, $filename;
- push @rarall, $filename;
- }
- elsif ( /\.r?0{0,2}1$/ && not qr/$justname\.r?0{0,3}$/ ~~ @allfiles ) {
- push @rarfirstpart, $filename;
- push @rarall, $filename;
- }
- else {
- push @rarall, $filename;
- }
- }
- when ( /\.(?:SFV|sfv)$/ && qr/$justname\.(?:r(?:\d{0,3}|ar)|\d{0,3}|RAR)$/ ~~ @allfiles ) {
- push @chksumfile, $filename;
- }
- default {
- push @notrar, $filename;
- }
- }
- }
- if ( @chksumfile ) {
- print colored "Checksum Files -\n", 'bold white';
- foreach my $chkfile ( @chksumfile ) {
- print "\t" . basename($chkfile) . "\n";
- }
- print colored "\n____________________________________________________\n", 'bold white';
- print "Perform checksum ?\t\t\t\t\t\t[";
- print colored "y ", 'bold green';
- print "/";
- print colored " n", 'bold red';
- print "]\n";
- my $accept = <>;
- if ( $accept =~ /[Yy]/ ) {
- checksum(@chksumfile);
- }
- }
- print colored "**********************UNRARING**********************\n", 'bold red';
- if ( @rarfirstpart ) {
- print colored "\n\t" . basename($_) . "\n", 'green' for @rarfirstpart;
- print colored "\n****************************************************\n", 'bold red';
- print "unrar ?\t\t\t\t\t\t\t\t[";
- print colored "y ", 'bold green';
- print "/";
- print colored " n", 'bold red';
- print "]\n";
- my $accept = <>;
- if ( $accept =~ /[Yy]/ ) {
- unrar_all(@rarfirstpart);
- }
- else {
- print colored "Aborting user chose no\n", 'bold yellow';
- }
- }
- else {
- print colored "NO RAR FILES PRESENT ABORTING...\n\n", 'yellow';
- print colored "\n****************************************************\n", 'bold red';
- exit 0;
- }
- print colored "\n\nDeleting Files -\n", 'bold red';
- print colored basename($_) . "\n", 'bold white on_red' for @rarall;
- print colored "\n____________________________________________________\n\n\n\n", 'bold red';
- print colored "Leaving Files -\n", 'bold green';
- print colored "\t" . basename($_) . "\n", 'yellow' for @notrar;
- print colored "\n____________________________________________________\n", 'bold green';
- print "unlink ?\t\t\t\t\t\t\t[";
- print colored "y ", 'bold green';
- print "/";
- print colored " n", 'bold red';
- print "]\n";
- my $accept = <>;
- if ( $accept =~ /[Yy]/ ) {
- foreach my $file ( @rarall ) {
- unlink $file or warn "Could not unlink $file: $!";
- }
- }
- else {
- print colored "Aborting user chose no\n", 'bold yellow';
- exit 0;
- }
- }
- sub wanted {
- push @allfiles, $File::Find::name;
- }
- sub checksum {
- my @chksumfile = @_;
- my $error;
- foreach my $chkfile ( @chksumfile ) {
- if ( execdir("cfv", "-f", $chkfile) ) {
- ++$error;
- }
- }
- if ( $error ) {
- print colored "$error", 'bold red';
- print "/";
- print colored scalar(@chksumfile), 'bold red';
- print " checksums failed\n";
- print "\nContinue ?\t\t\t\t\t\t\t[";
- print colored "y ", 'bold green';
- print "/";
- print colored " n", 'bold red';
- print "]\n";
- my $accept = <>;
- if ( $accept =~ /[Nn]/ ) {
- print colored "Aborting user chose no\n", 'bold yellow';
- exit 0;
- }
- }
- }
- sub unrar_all {
- my @rarfirstpart = @_;
- my @didntextract;
- foreach my $rarfile ( @rarfirstpart ) {
- if ( execdir("unrar", "x", $rarfile) ) {
- push @didntextract, $rarfile;
- }
- }
- if ( @didntextract ) {
- print colored "\nFINISHED WITH ERRORS: Could not unrar -\n", 'white on_red';
- print basename($_) . "\n" for @didntextract;
- print "\n";
- }
- }
- sub execdir {
- my ($cmd, $ops, $filename) = @_;
- my $working_dir = getcwd;
- ($filename, my $dir) = fileparse($filename);
- chdir $dir;
- my @args = ($cmd, $ops, $filename);
- system(@args);
- my $exit_value = $? >> 8;
- chdir $working_dir;
- if ( $exit_value ) {
- return 1;
- }
- else {
- return 0;
- }
- } #to use do execdir("cmd", "-ops", "/dir/file");
- sub rar_check {
- my ($file) = @_;
- open(FILETYPE, "file $file|");
- my $filetype = <FILETYPE>;
- close(FILETYPE);
- if ( $filetype =~ /.RAR archive data./ ) {
- return 1;
- }
- else {
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement