Archive

Posts Tagged ‘par2’

How to batch-repair a directory with par2

September 9th, 2009 No comments

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 !

Advice for posting par2 and split files

September 9th, 2009 No comments

( 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 !

Par2 repair with Linux

September 3rd, 2009 No comments

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 !

Usenet binaries with Linux tutorial

December 23rd, 2005 22 comments

»

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