#!perl -w
use strict;
use JSON::XS;
use Backblaze::B2;
use Getopt::Long;
GetOptions(
'c|credentials:s' => \my $credentials_file,
'o|target-base:s' => \my $target_base,
);
$target_base ||= '.';
my ($bucket_name, @files) = @ARGV;
=head1 SYNOPSIS
=cut
my $b2 = Backblaze::B2->new(
version => 'v1',
log_message => sub { warn sprintf "[%d] %s\n", @_; },
);
my $credentials = $b2->read_credentials( $credentials_file );
if( ! $credentials->{authorizationToken}) {
$b2->authorize_account(%$credentials);
};
(my $bucket) = grep { $_->name =~ /$bucket_name/ or $_->id eq $bucket_name }
sort { $a->name cmp $b->name }
$b2->buckets;
if( ! $bucket ) {
die "No bucket found with name matching '$bucket_name'";
};
print sprintf "Downloading from bucket %s\n", $bucket->name;
for my $file (@files) {
my $target = join "/", $target_base, $file;
if( -f $target ) {
warn "$target already exists, skipping\n";
next
};
my $content = $bucket->download_file_by_name(
file => $file,
);
open my $fh, '>', $target
or die "Couldn't create '$target': $!";
binmode $fh;
print {$fh} $target;
print sprintf "Downloaded %s (%d bytes) to %s\n", $file, length $content, $target;
};