別に色んなところですでにあると思うんだけど、仕事で書いたのでとりあえずさらしておく。FTPでディレクトリ毎全部アップロードするスクリプト。
#!/usr/bin/perl
use strict;
use Net::FTP;
use File::Spec;sub upload
{
my $ftp = shift;
my $local_root = shift;
my $remote_root = shift || '/';recursive_upload($ftp, $local_root, $remote_root);
}sub recursive_upload
{
my $ftp = shift;
my $local_root = shift;
my $remote_root = shift;local *LOCAL_DIR;
opendir(LOCAL_DIR, $local_root) or
die "Could not open directory $local_root for reading: $!";while (my $e = readdir(LOCAL_DIR)) {
next if $e =~ /^\.+$/;my $local = File::Spec->catfile($local_root, $e);
my $remote = File::Spec->catfile($remote_root, $e);stat($local);
if (-f _) {
$ftp->put($local, $remote);
} elsif (-d _) {
$ftp->mkdir($remote, 1);
recursive_upload($ftp, $local, $remote);
}
}
}my $ftp = Net::FTP->new('### HOST ADDRESS ###');
$ftp->login('### user ###', '### password ###');
$ftp->binary();upload($ftp, shift @ARGV, shift @ARGV);
こんな感じでね。
./ftp.pl local_directory remote_directory
scpとか使えない環境でftpアップロードを自動化する時に。