You can use this perl script.
$ mass-par2repair alt.binaries.*
Where arguments are directories, NOT files.
#!/usr/bin/perl -w
# Copyright (C) 2005 Anthony DeRobertis (netnews at derobert d0t net)
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this file; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
sub run_par(@);
my %results = ();
foreach my $dir (@ARGV) {
opendir DH, $dir or die “Could not open directory $dir: $!”;
my %par_files = ();
my %segment_files = ();
foreach my $file (readdir DH) {
my $base = undef;
if ($file =~ /.par2?$/i) {
if ($file =~ /^(.+)\.vol\d+\+\d+\.par2?$/i) {
$base = $1;
} elsif ($file =~ /^(.+)\.par2?/i) {
$base = $1;
} else {
die “Failed to find basename of $file.”;
}
push @{$par_files{$base}}, $file;
} elsif ($file =~ /^(.+)\.\d\d\d$/) {
$base = $1;
push @{$segment_files{$base}}, $file;
}
}
foreach my $key (keys %par_files) {
print “$key:\n “;
print join(“\n “, @{$par_files{$key}}), “\n”;
my @args = ();
foreach my $file (@{$par_files{$key}}, @{$segment_files{$key}}) {
push @args, “$dir/$file”;
}
my $retcode = run_par(@args);
if ($retcode == -1) {
die “Could not exec par2: $!”;
} elsif ($retcode == 0) {
#$results{$dir}->{$key} = ‘OK’;
print ” OK.\n\n”
} else {
$results{$dir}->{$key} = “FAILED ($retcode).”;
print ” FAILED ($retcode)\n\n”;
}
}
closedir DH;
}
print “\n\n\n”;
foreach my $dir (keys %results) {
print “SUMMARY FOR $dir:\n”;
foreach my $file (sort keys %{$results{$dir}}) {
print “\t$file: ” . $results{$dir}->{$file} . “\n”;
}
print “\n”;
}
sub run_par(@) {
my $pid = fork();
if ($pid == -1) {
return -1;
} elsif ($pid == 0) {
open STDOUT, ‘+>’, ‘/dev/null’ or die “> /dev/null failed: $!”;
exec {‘par2′} ‘par2′, ‘r’, ‘–’, @_;
die “Exec of par2 failed: $!”;
} else {
waitpid($pid, 0);
return $?;
}
}
########END OF PERL SCRIPT #############
As you noticed, I’ve messed up all the formatting but it still works. If you want the original file, contact the author, his address is in the headers.
So, to batch-repair everything in a directory you can also simply type :
for i in *.par2; do par2repair $i; done
This will work 99% of the time, since usually the first par2 file of the a set ( the smallest one ) is not capitalized, whereas the rest if them are.
To make it work 100% of the time, you can do this :
for i in *.[pP][aA][rR]2; do par2 r $i; done
But beware, this is a brutal, it will run par2repair everytime for every par2 file in the recovery set.
( thanks to the anonymous poster )
Please drop a comment if you have a question or new software to plug !
( Thanks a lot to “Nobody” @ a.b.m.a.d for this part! )
You don’t need a file splitter do it, the split command-line will do the job easily.
Posting rules :
* The split files must be a multiple of the par2 block-size, if not some blocks can be lost between two split files.
* The par2 block-size should be equal to the size of the article, or a multiple of it.
* Posting with Newspost constrains the article size to be a multiple of 45, and thus, so must be the Par2 block-size and the split file size.
Here’s an example of good settings :
# Par2 block-size : 225,000 bytes
# Article size : 225,000 bytes and 5000 lines
# Split files size : 9,000,000 bytes ( 40 articles )
#!/bin/sh
par2 create -s225000 $1
split –suffix-length=3 –numeric-suffixes –bytes=9000000 $1 $1′.’
Example of use :
$ sh parsplit.sh uberspanking.avi
To join the files back together and check them at the same time :
par2 r myfile.avi.par2 myfile.avi*
To post with Newspost, don’t forget to specify the good number of lines :
$ newspost …….. -l 5000 ……
Here’s another binary poster : yencee.
Please drop a comment if you have a question or new software to plug !
How do I repair incomplete files with the par2 parity files ?
With the parchive package ( or par2 package if you use Debian/Ubuntu )and the par2 command :
$ par2 r file.par2
or :
$ par2repair file.par2
Or with Quickpar that works fine with Wine.
How do par2/repair by double-clicking from my file manager without opening a console ? Is there a par2 GUI ?
Those using KDE/Konqueror won’t have any problem associating par2 files with par2repair and letting the console open after the operation, it’s very straight forward.
With Gnome opening a gnome-terminal from Nautilus is tricky since it the window closes too quickly you can’t see what happened, so let’s use xterm instead :
In Nautilus, associate par2 extensions with custom command-line :
xterm -hold -e par2repair
About the Par2 GUIs there are several :
Please drop a comment if you have a question or new software to plug !
»
Many thanks to the people on a.b.m.a.d for their help ! ( Anthony, Nobody, etc )
If you have other interesting tips to share about Usenet binaries with Linux, do not hesitate to drop a comment ( no registration required ). Stay tuned, this FAQ is regularly updated.
updated July 2007 : rar and Ben’s Par2GUI
updated September 2009 : new website