You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This perl script is much shorter and
• generates correct CSV
• Allows short names: adb-export.pl -e contacts
• Gathers exports in a single exports folder
#!/usr/bin/perl
use 5.14.2;
use warnings;
# Based on adb-export.sh from github.com:sromku/adb-export
# author: Roman Kushnarenko @sromku
# license: Apache License 2.0
our $VERSION = "0.01 - 20190718";
our $CMD = $0 =~ s{.*/}{}r;
sub usage {
my $err = shift and select STDERR;
say "usage: $CMD [--debug=[#]] --export[=URL]";
say " URL list available on github: https://github.com/snatik/adb-export";
exit $err;
} # usage
use Text::CSV_XS qw( csv );
use Getopt::Long qw(:config bundling);
GetOptions (
"help|?" => sub { usage (0); },
"V|version" => sub { say "$CMD [$VERSION]"; exit 0; },
"e|export:s" => \ my @exp,
"d|debug:1" => \(my $opt_d = 0),
"v|verbose:1" => \(my $opt_v = 1),
) or usage (1);
my @d = localtime;
my $stamp = sprintf "%4d%02d%02d-%02d%02d", $d[5] + 1900, $d[4] + 1, @d[3,2,1];
my %all = (
aggregation_exceptions => "com.android.contacts/aggregation_exceptions",
attendees => "com.android.calendar/attendees",
audio_albums => "media/external/audio/albums",
audio_artists => "media/external/audio/artists",
audio_genres => "media/external/audio/genres",
audio_media => "media/external/audio/media",
audio_playlists => "media/external/audio/playlists",
bookmarks => "settings/bookmarks",
calendars => "com.android.calendar/calendars",
contacts => "com.android.contacts/contacts",
data => "com.android.contacts/data",
data_phones => "com.android.contacts/data/phones",
deleted_contacts => "com.android.contacts/deleted_contacts",
directories => "com.android.contacts/directories",
events => "com.android.calendar/events",
extendedproperties => "com.android.calendar/extendedproperties",
global => "settings/global",
groups => "com.android.contacts/groups",
images_media => "media/external/images/media",
images_thumbnails => "media/external/images/thumbnails",
photo_dimensions => "com.android.contacts/photo_dimensions",
raw_contact_entities => "com.android.contacts/raw_contact_entities",
raw_contacts => "com.android.contacts/raw_contacts",
reminders => "com.android.calendar/reminders",
secure => "settings/secure",
status_updates => "com.android.contacts/status_updates",
system => "settings/system",
video_media => "media/external/video/media",
video_thumbnails => "media/external/video/thumbnails",
words => "user_dictionary/words",
);
my %lla = reverse %all;
-d "export" or mkdir "export", 0775;
@exp or @exp = sort values %all;
foreach my $url (@exp) {
exists $all{$url} and $url = $all{$url};
$url =~ s{^\w+://}{};
my $base = $lla{$url} or die "Unsupported URL: '$url'\n";
$base = "export/$base-$stamp";
my $rawf = "$base.raw";
$opt_v and warn sprintf "Exporting %-45s to %s\n", $url, $rawf;
my $data = `adb shell content query --uri content://$url`;
open my $fh, ">", $rawf;
print $fh $data;
close $fh;
my $csvf = "$base.csv";
$opt_v and warn sprintf "Exporting %-30s to %s\n", $url, $csvf;
$data =~ m/^Row:\s*\d/ or next;
my @h;
my @r;
for (split m/(?:^|\n)(?=Row:\s*\d+\s+\w+=)/ => $data) {
s/^Row:\s*\d+\s+/, /;
my @v = m/,\s+(\w+)=(.*?)(?=$|, \w+=)/g;
unless (@h) {
@h = map { $v[$_] } grep { $_ % 2 == 0 } 0 .. $#v;
}
my %v = @v;
s/^NULL$// for values %v;
push @r, \%v;
}
csv (in => \@r, out => $csvf, headers => \@h);
$opt_v > 1 and warn sprintf "%17d records\n", scalar @r;
}
The text was updated successfully, but these errors were encountered:
This perl script is much shorter and
• generates correct
CSV
• Allows short names:
adb-export.pl -e contacts
• Gathers exports in a single
exports
folderThe text was updated successfully, but these errors were encountered: