ref: d4bd31d8717f04fc374605aea308eb96cf630989
parent: 51d7d3eb6aee563d489f52258f6bc16d43cc50de
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