ref: a5f58a1fdd5771ba2b7761e8cefce506a24db88b
parent: de0bbb09ca2007cf6f351d184e3eecb60fad5628
author: sl <sl@reform>
date: Sat Aug 13 20:37:32 EDT 2022
add /rc/bin/splitmbox (we've already shipped the splitmbox(8) man page for years) (thanks, umbraticus)
--- /dev/null
+++ b/rc/bin/splitmbox
@@ -1,0 +1,101 @@
+#!/bin/rc
+rfork en
+
+mbox = /mail/box/$user/mbox
+dest = /mail/box/$user/mboxdir-
+
+fn usage{+ echo 'usage: splitmbox [[mbox] dest]'>[1=2]
+ exit usage
+}
+
+fn dirbits{+ awk -v 'isdir='$1 '
+ {+ str = $1
+ printf "0"
+ for(i = 3; i < 12; i += 3){+ s = substr(str, i, 3);
+ b = 0;
+ if(s ~ /r/)
+ b += 2
+ if(s ~ /w/)
+ b += 4
+ if(s ~ /x/ || isdir && s ~ /[rwx]/)
+ b += 1
+ printf b
+ }
+ print ""
+ }
+ '
+}
+
+fn docopy{+ src=$1; shift
+ dst=$dest/$1; shift
+ echo $src '->' $dst
+ # painful reminder that rc does need a break statement.
+ done=()
+ while(~ $#done 0){+ if(! test -f $dst^.^$1){+ if(! cp $src/rawunix $dst^.^$1)
+ exit copy
+ done = 1
+ }
+ shift
+ }
+}
+
+fn doit{+ upas/fs -pf$mbox
+ if(! test -d $dest)
+ mkdir $dest #upas/nedmail -c $dest
+ if(! test -d $dest)
+ exits mkdir
+ if(! chgrp $user $des)
+ exits chgrp
+ if(! chmod g+rwx $dest)
+ exits chmod
+ if(~ $mbox mbox */mbox)
+ if(! chmod o+wx $dest)
+ exits chmod
+
+ cd /mail/fs/mbox
+ l = `{{for(i in [0-9]*) echo $i} | sort -n}+ echo $l
+ if(! ~ $l '[0-9]*')
+ for(i in $l)
+ docopy $i `{cat $i/fileid|sed 's/\.00$//g'} `{seq -w 0 99}+}
+
+lucky = cat
+if(~ $1 -l){+ shift
+ lucky = rc
+}
+
+switch($#*){+case 0
+case 1
+ mbox=`{cleanname -d `{pwd} $1}+case 2
+ mbox=`{cleanname -d `{pwd} $1}+ dest=$2
+case *
+ usage
+}
+
+usenupas
+whatis dest
+doit
+
+bits=`{ls -ld $mbox | dirbits 1}+chmod $bits $dest
+if(~ $mbox mbox || ~ `{ls -ld $mbox | sed 's/ .*//'} *w)+ chgrp $user $dest
+
+
+{+ echo '#' if everything is fine, execute the following commands
+ echo mv $mbox $mbox^- '&&' mv $dest $mbox
+} | $lucky
--
⑨