Sample code for 30+ languages & platforms
Perl Requires Chilkat v9.5.0.76+

FTP Sync Upload Tree w/ Must-Match Filename Constraints

See more FTP Examples

Demonstrates how synchronize a directory tree in the upload direction, but only upload files matching a set of wildcard filenames.

Chilkat Perl Downloads

Chilkat2 Perl
use strict;
use warnings;
use Chilkat2;

# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

my $ftp = Chilkat2::Ftp2->new;

$ftp->Hostname('ftp.something.com');
$ftp->Username('my_login');
$ftp->Password('my_password');

# Connect and login to the FTP server.
my $success = $ftp->Connect();
if (!$success) {
    print $ftp->LastErrorText, "\n";
    exit;
}

# Set the current remote directory to the root of
# the tree to receive the uploaded files.
$success = $ftp->ChangeRemoteDir('/subDir1');
if (!$success) {
    print $ftp->LastErrorText, "\n";
    exit;
}

# Possible synchronization modes are:
# mode=0: Upload all files
# mode=1: Upload all files that do not exist on the FTP server.
# mode=2: Upload newer or non-existant files.
# mode=3: Upload only newer files. If a file does not already exist on the FTP server, it is not uploaded.
# mode=4: transfer missing files or files with size differences.
# mode=5: same as mode 4, but also newer files.

# This example will upload all files, but only those files having filenames
# that match *.gif and *.eml

# Imagine our local directory tree has these files and directories:

#     accentedLatin1.txt
#     accentedUtf8.txt
#     alice.key
#     anter_cert.pem
#     chiliPepper.gif
#     helloWorld.pdf
#     abc/chiliPepper.gif
#     abc/ghk/
#     data/chiliPepper.gif
#     data/xyz/dkimHtmlBody.txt
#     data/xyz/dkimVerifyTest.eml
#     data/xyz/emailForCreateDsn.eml
#     text/frenchUtf8.txt
#     text/helloWorld.txt
#     text/PolishEmailBody.txt
#     text/something/

$ftp->SyncMustMatch('*.eml; *.gif');
my $mode = 0;
$success = $ftp->SyncRemoteTree('c:/temp/subDir1', $mode);
if (!$success) {
    print $ftp->LastErrorText, "\n";
    exit;
}

$success = $ftp->Disconnect();

# Show the files downloaded.
my $st = Chilkat2::StringTable->new;
$ftp->GetSyncedFiles($st);

my $numFiles = $st->Count;
my $i = 0;
my $remoteFilename = '';
while ($i < $numFiles) {
    print $st->StringAt($i), "\n";
    $i = $i + 1;
}

# Output showing the files uploaded:

# chiliPepper.gif
# abc/chiliPepper.gif
# data/chiliPepper.gif
# data/xyz/dkimVerifyTest.eml
# data/xyz/emailForCreateDsn.eml