別に色んなところですでにあると思うんだけど、仕事で書いたのでとりあえずさらしておく。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アップロードを自動化する時に。