#!/bin/sh
usage="Usage $(basename $0): [OPTION]...
...\n\t-m\tmax size for a file collection\n\t-d\toutput directory\n\t-dvd\tmax size set for dvd\n\t-cd\tmax size set for cd\n"
numdir=0
while [ "$1" != "" ]; do
if [ "$1" = "-d" ]; then
odir=$2
shift
elif [ "$1" = "-m" ]; then
max=$2
shift
elif [ "$1" = "-dvd" ]; then
max=4680000000
elif [ "$1" = "-cd" ]; then
max=700000000
else
dir[$numdir]="$1"
let numdir="$numdir+1"
if [ "$odir" = "" ]; then
odir=$1
fi
fi
shift
done
if [ "$max" = "" ]; then
echo -e "$(basename $0): -m, -dvd, or -cd option required"
echo -e "${usage}"
exit
fi
if [ "$numdir" = 0 ]; then
echo -e "$(basename $0): no directories specified"
echo -e "${usage}"
exit
fi
echo "max=$max"
echo "odir=$odir"
echo "dirs=${dir[@]}"
cnt=0
sdir=${odir}.split
[ "$max" -lt 50000 ] && exit
mkdir "${sdir}"
cdir=1
odir="${sdir}/${cdir}.dir"
mkdir "${odir}"
echo "creating '${odir}'"
find "${dir[@]}" -type f | while read i
do
fsz=$(stat -c "%s" "$i")
if [ "$fsz" -gt "$max" ]; then
echo "XXX error '$i'"
echo "XXX file size larger than snap size --- invalid!"
exit
fi
if [ "$(($fsz+$cnt))" -gt "$max" ]; then
cnt=0
cdir=$(($cdir+1))
odir="${sdir}/${cdir}.dir"
mkdir "${odir}"
echo "creating '${odir}'"
fi
cnt=$(($fsz+$cnt))
mkdir -p "$odir/$(dirname "$i")"
echo "$cnt \"$i\" \"$odir/$i\"" >> ${odir}/contents.txt
ln "$i" "$odir/$i"
done
gzip "${sdir}"/*/contents.txt