90 lines
1.9 KiB
Perl
Executable File
90 lines
1.9 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
use 5.018;
|
|
use strict;
|
|
use warnings;
|
|
use utf8;
|
|
use open qw (:std :utf8);
|
|
use English qw ( -no_match_vars );
|
|
use version; our $VERSION = qw (1.0);
|
|
|
|
my $workdir;
|
|
|
|
# сменим рабочий каталог
|
|
BEGIN {
|
|
use Cwd qw (chdir abs_path);
|
|
my @CWD = split /\//xms, abs_path ($PROGRAM_NAME);
|
|
if ($#CWD > 1) { $#CWD = $#CWD - 2; }
|
|
$workdir = join '/', @CWD;
|
|
chdir $workdir;
|
|
}
|
|
|
|
use lib ("$workdir/lib", "$workdir/vendor_perl", "$workdir/vendor_perl/lib/perl5");
|
|
use File::Basename qw (basename dirname);
|
|
use File::Find qw (find);
|
|
use YadProxy::Conf qw (LoadConf);
|
|
use YadProxy::Lib qw (GetAccessToken);
|
|
use Yandex::Disk;
|
|
|
|
my $c = LoadConf ();
|
|
|
|
my $disk = Yandex::Disk->new ( -token => GetAccessToken );
|
|
my $remote_dir = $c->{remote_dir};
|
|
my $local_dir = $c->{local_dir};
|
|
|
|
if (substr ($remote_dir, -1) eq '/') {
|
|
chop $remote_dir;
|
|
}
|
|
|
|
if (substr ($remote_dir, 0, 1) eq '/') {
|
|
$remote_dir = substr $remote_dir, 1;
|
|
}
|
|
|
|
if (substr ($local_dir, -1) eq '/') {
|
|
chop $local_dir;
|
|
}
|
|
|
|
# рекурсивненько зааплодим найденные файлы
|
|
find (
|
|
{
|
|
wanted => \&wanted,
|
|
no_chdir => 1
|
|
},
|
|
$local_dir
|
|
);
|
|
|
|
sub wanted {
|
|
my $file = $_;
|
|
my %targets;
|
|
|
|
if (-f $file) {
|
|
print "Uploading file: $file ... ";
|
|
my $target = substr $file, length ($local_dir) + 1;
|
|
$target = dirname $target;
|
|
|
|
if (defined $target && $target ne '' && $target ne '/') {
|
|
$target = sprintf '%s/%s', $remote_dir, $target;
|
|
} else {
|
|
$target = $remote_dir;
|
|
}
|
|
|
|
unless (defined $targets{$target}) {
|
|
unless ($disk->createFolder (-path => $target, -recursive => 1)) {
|
|
die "Невозможно создать каталог $c->{remote_dir} на Yandex.Диске";
|
|
}
|
|
|
|
$targets{$target} = 1;
|
|
}
|
|
|
|
$disk->uploadFile (
|
|
-file => $file,
|
|
-remote_path => $target,
|
|
-overwrite => 1
|
|
) or warn "Не могу за-аплодить файл в каталог $remote_dir на Yandex.Диске\n";
|
|
|
|
print "done.\n";
|
|
}
|
|
|
|
sleep 3;
|
|
}
|