linear-to-modulus.pl 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #!/usr/bin/perl
  2. use File::Basename;
  3. #
  4. # Convert linear newsgroup spool dirs to a 'modulus dir' spool
  5. #
  6. # It is assumed you've made a /COPY/ of your existing newsd spool
  7. # spool directory, and modify the 'foreach()' loop below to point
  8. # to the new copy's newsgroup dirs.
  9. #
  10. # When the script runs, it will rearrange the articles of these groups
  11. # into "1000"s subdirs, suitable for newsd's new "MsgModDirs on" option.
  12. #
  13. foreach $dir (
  14. "spool/fltk/announce",
  15. "spool/fltk/bugs",
  16. "spool/fltk/commit",
  17. "spool/fltk/coredev",
  18. "spool/fltk/general",
  19. "spool/fltk/opengl",
  20. "spool/rush/general",
  21. "spool/rush/test",
  22. ) {
  23. print STDERR "Working on $dir\n";
  24. if ( ! -d $dir )
  25. { print STDERR "Skipping: $dir: $!\n"; next; }
  26. my $newdir = "$dir/new";
  27. foreach $msg ( glob("$dir/[0-9]*") ) {
  28. my $msgnum = int(basename($msg)); # 999
  29. my $moddir = int($msgnum / 1000) * 1000; # 0
  30. my $inmsg = "$dir/$msgnum"; # fltk/announce/999
  31. my $outmsgdir = "$newdir/$moddir"; # fltk/announce/new/0
  32. my $outmsg = "$outmsgdir/$msgnum"; # fltk/announce/new/0/999
  33. if ( ! -d $outmsgdir ) { # See if modulus dir doesn't exist..
  34. print STDERR "\nCreating: $outmsgdir\n"; # create if not
  35. if ( system("mkdir -p $outmsgdir") != 0 ) {
  36. print STDERR "ERROR: mkdir failed\n";
  37. exit(1);
  38. }
  39. }
  40. unless ( rename($inmsg, $outmsg) ) { # move msg into modulus dir
  41. print STDERR "ERROR: rename($inmsg, $outmsg): $!\n";
  42. exit(1);
  43. }
  44. print STDERR "."; # "progress"
  45. }
  46. print STDERR "\n";
  47. # Now move modulus dirs up one, and remove the 'new' tmpdir
  48. my $mvcmd = "mv $newdir/[0-9]* $dir && rmdir $newdir";
  49. if ( system($mvcmd) != 0 ) {
  50. print STDERR "ERROR: '$mvcmd' failed\n";
  51. exit(1);
  52. }
  53. }