Hi! Searching metacpan for "ftp", or better for "ftp recursive" will lead you to Net::FTP::Recursive. Then a super search for Net::FTP::Recursive (and looking through the results) reveals an apparently working script in Net::FTP::Recursive question. The bug mentioned there seems to be fixed meanwhile, and the test matrix of the module is mostly green.
I didn't test anything of it, that's up to you - I just wanted to show off my magical search skills :-)