1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #!/usr/bin/perl
- use File::Basename;
- #
- # Convert linear newsgroup spool dirs to a 'modulus dir' spool
- #
- # It is assumed you've made a /COPY/ of your existing newsd spool
- # spool directory, and modify the 'foreach()' loop below to point
- # to the new copy's newsgroup dirs.
- #
- # When the script runs, it will rearrange the articles of these groups
- # into "1000"s subdirs, suitable for newsd's new "MsgModDirs on" option.
- #
- foreach $dir (
- "spool/fltk/announce",
- "spool/fltk/bugs",
- "spool/fltk/commit",
- "spool/fltk/coredev",
- "spool/fltk/general",
- "spool/fltk/opengl",
- "spool/rush/general",
- "spool/rush/test",
- ) {
- print STDERR "Working on $dir\n";
- if ( ! -d $dir )
- { print STDERR "Skipping: $dir: $!\n"; next; }
- my $newdir = "$dir/new";
- foreach $msg ( glob("$dir/[0-9]*") ) {
- my $msgnum = int(basename($msg)); # 999
- my $moddir = int($msgnum / 1000) * 1000; # 0
- my $inmsg = "$dir/$msgnum"; # fltk/announce/999
- my $outmsgdir = "$newdir/$moddir"; # fltk/announce/new/0
- my $outmsg = "$outmsgdir/$msgnum"; # fltk/announce/new/0/999
- if ( ! -d $outmsgdir ) { # See if modulus dir doesn't exist..
- print STDERR "\nCreating: $outmsgdir\n"; # create if not
- if ( system("mkdir -p $outmsgdir") != 0 ) {
- print STDERR "ERROR: mkdir failed\n";
- exit(1);
- }
- }
- unless ( rename($inmsg, $outmsg) ) { # move msg into modulus dir
- print STDERR "ERROR: rename($inmsg, $outmsg): $!\n";
- exit(1);
- }
- print STDERR "."; # "progress"
- }
- print STDERR "\n";
- # Now move modulus dirs up one, and remove the 'new' tmpdir
- my $mvcmd = "mv $newdir/[0-9]* $dir && rmdir $newdir";
- if ( system($mvcmd) != 0 ) {
- print STDERR "ERROR: '$mvcmd' failed\n";
- exit(1);
- }
- }
|