i decided to write a python script for what i wanted in the end. thanks for your help. i dont think your method would work though...
lets call the oldest data Set A - this only exists on the source device
lets call the newest 250GB Set B - this exists on both.
i then add new files (Set C) to the source drive. if i run your method, the diff between the source and destination will be Set A + Set C - which includes the oldest files and then a small amount of new ones.
anyway, here's my python script. sorry i wasted your time seawolf - i was hoping for an elegant bash solution ill make do with my python script
i decided to use an exclude list instead of an include list, so i could use the rsync flag --delete-excluded to remove data from the destination that is now considered too old. this python code would look a lot neater if i didnt fill it with a shitload of comments, but someone may find it useful.
#! /usr/bin/env python
# a script to sync the newest x bytes from one directory to another,
# removing old data from the destination where appropriate
# destination root, with trailing slash (source directory will be created)
destination = '/media/video_bk/'
#our size limit, in bytes
limit = 225000000
import os, sys, time
from subprocess import *
p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
output = p.communicate()
if len(sys.argv) < 2:
print 'argument required to be used as source directory'
source = sys.argv
#remove trailing slash so we dont wipe the disk out...
if source[-1] == '/':
source = source[:-1]
# this lists by ctime (time of last modification of file status information)
# see man ls for sorting by modification, creation etc
list = issue('ls -cs '+source)
list = list.split('\n')
totalSize = 0
# list of names to be excluded
names = 
# for each line of the ls -cs command, ignoring the first (total) and last (blank)
for line in list[1:-1]:
#strip whitespace and split on first space (so size and names are different elements)
line = line.strip().split(' ',1)
#add to total size
totalSize = totalSize+int(line)
# if we're over the size limit, we'll add it to the exclusion list
if limit < totalSize:
# construct the rsync exclude list
excludeFile = '/tmp/exclude.list'
exclude = open(excludeFile, 'w')
for name in names:
if '[' in name:
name = name.replace('[','\[').replace(']','\]')
cmd = 'rsync -a --progress --exclude-from '+excludeFile+' --delete-excluded '+source+' '+destination