perlのNet::FTPを使って、ディレクトリ内のファイルを全部アップロードするサンプルスクリプト

キーボード+運ぶ

perlのモジュールNet::FTPを使って、あるディレクトリに入ったファイルを丸ごとアップロードするサンプルプログラムです。

お仕事上では、ネットショップさんのお手伝いをするときに、大量の商品画像をアップロードするのにこんなプログラムを使ったりします。あと、実際の運用のときには、たとえば途中で画像をリサイズする処理を入れたりすることもできますね。

ふだんあまりプログラムを書いたりしないという方にも、これは何かと使えるのではないかと思います。

use Net::FTP;
 
my $host = "my.host.com";
my $id = "myid";
my $passwd = "mypassword";
my $path = "/path";
 
my $ftp = Net::FTP->new($host, Debug => 0);
$ftp->login($id,$passwd);
$ftp->cwd($path);
$ftp->binary;#画像を送るときはバイナリモードで
 
my @dirs = ( 'dir1', 'dir2', 'dir3' );#ディレクトリのリスト
 
#ディレクトリを開ける
foreach my $dir ( @dirs ){
    opendir(DIRHANDLE, "./".$dir );
    foreach my $file (readdir(DIRHANDLE) ){
        next if $file =~ /^\.{1,2}/;
        next if $file =~ /db$/;
        #例えばここで画像のリサイズをしたりとか。
        $ftp->put("./".$dir."/".$file) or die $!;
    }
    closedir(DIRHANDLE);
}
 
$ftp->quit;

関連記事