my %rsyncOptions = ( 'recursive' => '1', 'times' => '1', 'ignore-existing' => '1', 'rsh' => '"/usr/bin/ssh"', 'verbose' => '1' ); my $pattern = "\"+ mail.log*\""; push(@includePatterns, $pattern); push(@includePatterns, '"- **"'); #exclude everything else $rsyncOptions{'include'} = \@includePatterns; my $rsync = File::Rsync->new(\%rsyncOptions); my ($cmd, $infun, $outfun, $errfun, $debug) =$rsync->getcmd(%rsyncOptions, 'src' => $sourceDir, 'dest' => $destDir); print "Cmd: " . join(" ", @$cmd) . "\n"; my $sourceDir = "/var/log/"; my $destDir = "log/mail/"; $rsync->exec( { src => $sourceDir, dest => $destDir } );