63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| # bug 1. final results as *.zip files are deleted by wrong
 | |
| # bug 2. folders containing space cannot be correctly parsed.
 | |
| 
 | |
| use File::Find;
 | |
| use File::Copy;
 | |
| use Cwd;
 | |
| 
 | |
| if ($ARGV[0] =~ m|^\s*$|)
 | |
| {
 | |
|     print "Extract warez directories recursively.\n";
 | |
|     print "Usage: perl $0 TOP_DIR\n";
 | |
|     print "Example: perl $0 /temp/my0day\n";
 | |
|     exit 0;
 | |
| }
 | |
| 
 | |
| @dirs = ($ARGV[0]);
 | |
| 
 | |
| find ( {wanted => \&wanted},
 | |
|        @dirs );
 | |
| 
 | |
| sub wanted
 | |
| {
 | |
|     if (-d $_)
 | |
|     {
 | |
| 	# We are in the containing folder of $_
 | |
| 	$folder = $_;
 | |
| 	$folder =~ s| |_|g; # folders containing space in names cannot be extracted.
 | |
| 	rename $_, $folder;
 | |
| 
 | |
| 	@zipfiles = glob "$folder/*.zip";
 | |
| 	foreach $zipfile (@zipfiles)
 | |
| 	{
 | |
| 	    print "$zipfile\n";
 | |
| 	    system "unzip -n $zipfile -d $folder";
 | |
| 	}
 | |
| 
 | |
| 	@rarfiles = glob "$folder/*.rar";
 | |
| 	if (scalar @rarfiles > 0)
 | |
| 	{
 | |
| 	    $rarfile = $rarfiles[0]; # Only the first rar (which is the sole *.rar or *.part1.rar) is to be extracted. 
 | |
| 	    print "$rarfile\n";
 | |
| 	    system "\"s:/Program Files/WinRAR/RAR.exe\" x -o- $rarfile $folder > $folder/unrar.info";
 | |
| 	}
 | |
| 
 | |
| 	#############################
 | |
| 	##### WARNING ###############
 | |
| 	# sometime a file extracted from *.rar is another *.zip! In this case it will be deleted by wrong!
 | |
| 	open INFO, "$folder/unrar.info" or next;
 | |
| 	while (<INFO>)
 | |
| 	{
 | |
| 	    if (m|All OK|)
 | |
| 	    {
 | |
| 		unlink glob "$folder/*.zip";
 | |
| 		unlink glob "$folder/*.r??";
 | |
| 		unlink glob "$folder/*.DIZ";
 | |
| 		unlink glob "$folder/*.diz";
 | |
| 		unlink glob "$folder/unrar.info";
 | |
| 	    }
 | |
| 	}
 | |
| 	close INFO;
 | |
|    }
 | |
| }
 |