#!/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