<?xml version="1.0" encoding="windows-1252"?>
<node id="573531" title="Mirror a local directory to an FTP server" created="2006-09-18 07:54:30" updated="2006-09-18 03:54:30">
<type id="1042">
CUFP</type>
<author id="80839">
davis</author>
<data>
<field name="doctext">
&lt;div&gt;
This is disgusting, but it's a just a quick-n-dirty hack to upload a directory structure to a remote FTP server where the FTP server would only allow one "put" command per login session. Yes, really. Obviously there was no ssh access otherwise I would have used rsync/scp -r. Oh well.
&lt;code&gt;
#!/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 (&lt;$dir/*&gt;) {

            upload_dir($entry) if(-d $entry);

            my $ftp =  Net::FTP-&gt;new($ftphost)
                or die "Can't connect to $ftphost: $@";
            $ftp-&gt;login($ftpuser, $ftppass)
                or die "Can't login ", $ftp-&gt;message;
            my $dirname = dirname $entry;
            $ftp-&gt;mkdir($dirname, 1);
            $ftp-&gt;cwd($dirname);
            $ftp-&gt;put($entry);
            $ftp-&gt;quit;
    }
}

&lt;/code&gt;

&lt;/div&gt;

&lt;!-- Node text goes above. Div tags should contain sig only --&gt;
&lt;div class="pmsig"&gt;&lt;div class="pmsig-80839"&gt;
&lt;br&gt;davis&lt;br&gt;
&lt;div class="pmsig-80839"&gt;
&lt;font size="-3"&gt;
Kids, you tried your hardest, and you failed miserably. The lesson is: Never try.
&lt;/font&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;</field>
</data>
</node>
