再帰的FTPアップロード

| トラックバック(0)



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


Author

Daisuke Maki (a.k.a lestrrat): Perl hacker, Director of Japan Perl Association, YAPC::Asia Tokyo Organizer (2009-2012), Fluent in Japanese, English. Ex-Brazilian (sorta)

#perl #c #ruby #java #mysql #english #japanese #opensource #stf #cooking #scotch #cigar


このエントリーをはてなブックマ
ークに追加

翔泳社よりモダンPerl入門(2010)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><

月別アーカイブ