#!/bin/sh
# Move files from current directory to temp directories
# all smaller than a given size
#
# Autor Thorsten Gunkel <tgunkel@gmx.de>
#
# --- 24.04.2002 Thorsten Gunkel <tgunkel@gmx.de> ---
# * Completly rewritten
# * No more endless loops
# * Can deal with spaces in filenames
# --- 24.04.2002 Thorsten Gunkel <tgunkel@gmx.de> ---
# * Initial release

# Note: Get all sizes with --block-size=1

# Iomega 100MB zip
MAX_SIZE=100431872

# media number
counter=0

fertig=0

while [ $fertig -eq 0 ]
do
 # Fill next media
 counter=`expr 1 + $counter`
 # Space left on media
 r_size=$MAX_SIZE

 # Check for directories
 if [ -d $counter ]; then
  echo "Directory $counter exists, try to remove ..."
  rmdir $counter
  if [ -d $counter ]; then
   echo "*** Directory $1 exists and can't be removed ***"
   exit 1
  fi
 fi

 # Create directory
 mkdir $counter

 # find files, largest first
 find . -type f -maxdepth 1 -printf %s\ %f\\n | sort -rn | while read line
 do
  # size of actual file
  f_size=`echo $line | awk '{ print $1 }'`
  # name of actual file
  f_name="`echo $line | sed s/'^[0-9]* '//`"
  # all files must be <= media size
  if [ $f_size -gt $MAX_SIZE ]; then
    echo "*** \"$f_name\" is larger then $MAX_SIZE ***"
    exit 1
  fi
   # enough space left?
   if [ $f_size -le $r_size ]; then
     r_size=`expr $r_size - $f_size`
    echo "($r_size) mv $f_name -> $counter/"
    mv "$f_name" $counter/
   fi
 done
 # check if we are ready
 if [ `find $counter -type f -maxdepth 1 | wc -l` -eq 0 ]; then
  fertig=1
  rmdir $counter
 fi
done

