home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Unix System Administration Handbook 1997 October
/
usah_oct97.iso
/
news
/
cnews.tar
/
util
/
sfshproto
< prev
next >
Wrap
Text File
|
1995-04-27
|
2KB
|
60 lines
#! /bin/sh
# spacefor - determine available disk space
# About how many things of $1 bytes will fit in the available space for
# stuff of type $2 ("incoming", "articles", "control", "outbound $3",
# "batchfiles", or "archive") without cramping things too badly?
#
# You'll have to change this -- your blocksize, minimum-free-desired amounts,
# and df output format will probably differ, and you may need to name
# your filesystems explicitly. Note that all amounts are expressed in
# target-filesystem blocks, not some arbitrary absolute unit. (Absolute
# units might be better but there is no agreement on what they should be.)
# =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
. ${NEWSCONFIG-/etc/news/bin/config}
PATH=$NEWSCTL/bin:$NEWSBIN:$NEWSPATH ; export PATH
umask $NEWSUMASK
# head off special case
case "$1" in
0) echo 10000 ; exit 0 ;;
esac
# argument to df, df units, and free space desired (in df units)
dfunit=1024 # default df unit (bytes)
case "$2" in
incoming) arg="$NEWSARTS/in.coming" ; desire=5000 ;;
articles) arg="$NEWSARTS" ; desire=5000 ;;
control) arg="$NEWSCTL" ; desire=3000 ;; # for expire, mostly
outbound) arg="/var/spool/uucp" ; desire=10000 ;; # ignore $3
batchfiles) arg="$NEWSARTS/out.going" ; desire=5000 ;;
archive) arg="$NEWSARTS" ; desire=1 ;; # system-specific
*) arg="$2" ; desire = 1 ;;
esac
# In the following, the initialization of nf determines which field the
# block count comes from, and the one for nr determines which line. For
# System V, the Makefile edits in a sed which tries to strip silliness
# off in a reasonably System-V-variant-independent way. Expr would be
# faster than awk, but on a 16-bit machine, expr does 16-bit arithmetic,
# which isn't enough.
# this is set up for the stupid 4BSD df
df $arg | awk "BEGIN { nf = 4 ; nr = 2 }
NR == nr && NF >= nf {
nb = (\$nf - $desire) * $dfunit / $1
if (nb > 10000)
nb = 10000 # ensure representable as integer
nb = int(nb)
if (nb <= 0)
print 0
else
print nb
exit
}
NR == nr && NF < nf { # idiotic Berkeley continuation
nr += 1
nf -= 1
}"