mirror of
git://git.9front.org/plan9front/plan9front
synced 2025-01-12 11:10:06 +00:00
add /rc/bin/splitmbox (we've already shipped the splitmbox(8) man page for years) (thanks, umbraticus)
This commit is contained in:
parent
51d7d3eb6a
commit
d4bd31d871
1 changed files with 101 additions and 0 deletions
101
rc/bin/splitmbox
Executable file
101
rc/bin/splitmbox
Executable file
|
@ -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
|
Loading…
Reference in a new issue