Como o FTP não é o protocolo preferido para copiar diretórios aninhados em profundidade, tentei encontrar uma maneira de compactar todos os arquivos em um único arquivo no lado do servidor.
Uma possibilidade de empacotar os arquivos para usar um console SSH com um comando como
zip -r <username>/backup_29_08_12.zip<username>
Como o meu fornecido não permite essa conexão, no meu caso isso não foi possível.
Descobri que meu provedor permite usar o pacote PEAR Archive_Tar . O resultado é um scipt do PHP contendo os arquivos:
<?
@error_reporting(E_ALL ^ E_WARNING);
@ini_set("max_execution_time", 0);
@ini_set("memory_limit", "-1");
$directory = "";
$ignore = array("*.sql.gz", "*.tar.gz");
$path = preg_replace('/(\/www\/htdocs\/\w+\/).*/', '$1', realpath(__FILE__));
include "Archive/Tar.php";
$archivename = preg_replace('/.+\/(.+)\/$/', '$1', $path).date('_Y-m-d_His').".tar.gz";
$archive = new Archive_Tar($archivname, true);
$archive->setIgnoreList($ignore);
$archive->createModify($path.$directory, "", $path);
echo "Backup done";
?>
Chamar esse script em uma pasta com o CHMOD 0777 demorou cerca de meia hora. Depois disso, consegui baixar os arquivos compactados sem uma velocidade limitada de download.