#!/usr/bin/perl use warnings; use strict; use Net::FTP; use File::Basename; my $startdir = "somewhere"; my $ftphost = "somehost"; my $ftpuser = "someuser"; my $ftppass = "somepass"; upload_dir($startdir); sub upload_dir { my $dir = shift; foreach my $entry (<$dir/*>) { upload_dir($entry) if(-d $entry); my $ftp = Net::FTP->new($ftphost) or die "Can't connect to $ftphost: $@"; $ftp->login($ftpuser, $ftppass) or die "Can't login ", $ftp->message; my $dirname = dirname $entry; $ftp->mkdir($dirname, 1); $ftp->cwd($dirname); $ftp->put($entry); $ftp->quit; } }