Se os seus nomes de arquivo são simples (sem espaço em branco, etc.), você pode usar
left_dir=...
right_dir=...
find $left_dir -type f | while read left ; do
relpath=${left#$left_dir}
diff <(myfilter $left) <(myfilter $right_dir$relpath)
done
Se isso já é "muito script" e ainda há problemas (espaço em branco em nomes de arquivos, arquivos não existentes em um lado, etc.), provavelmente você está sem sorte.