diff options
author | sl <sl@reform> | 2022-08-14 00:37:32 +0000 |
---|---|---|
committer | sl <sl@reform> | 2022-08-14 00:37:32 +0000 |
commit | d4bd31d8717f04fc374605aea308eb96cf630989 (patch) | |
tree | 6a841f8210b03cb8a8c4fe0c460b698b9675f504 /rc/bin | |
parent | 51d7d3eb6aee563d489f52258f6bc16d43cc50de (diff) |
add /rc/bin/splitmbox (we've already shipped the splitmbox(8) man page for years) (thanks, umbraticus)
Diffstat (limited to 'rc/bin')
-rwxr-xr-x | rc/bin/splitmbox | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/rc/bin/splitmbox b/rc/bin/splitmbox new file mode 100755 index 000000000..ba9354376 --- /dev/null +++ b/rc/bin/splitmbox @@ -0,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 |