Method 1:
If you're okay with getting the output file as a .tar
archive, try this command:
adb exec-out tar c data/data > data_backup.tar
Make sure to omit the leading /
in your path. (Source)
Method 2:
If you want to copy file-wise, use the following script written by me:
#!/bin/bash
## Run as: ./filename.sh <source_folder> <destination_folder>
## If no <destination_folder> is provided, it's stored in current directory.
location=$1
if [ -z "$2" ]
then
destination=.
else
destination=$2
fi
## Find the full path of all the files in the given directory, and retrieve each file one by one
while read line
do
## Create the directory where the file will reside, by removing the filename alone from the fullpath.
## Thanks to https://stackoverflow.com/a/9022471/5002496
mkdir -p $destination"${
line%/*
}
"
adb pull $line $destination$line
done <<< `adb shell find $location -type f`
## The find binary in Android doesn't seem to show symlinks when '-type f' option is used.
## Source: https://stackoverflow.com/a/16303559/5002496
Save it as adb_pull.sh
, run chmod 777 adb_pull.sh
and run it like:
./adb_pull.sh /data/data data_backup
All the contents from /data/data
from Android device will be stored into data_backup
folder.
(Note: DON'T specify the source folder like /data/data/
with an additional /
after the folder name)
Tested and working on my Ubuntu 17.04, using an Android 7.1 device.
Note: To access /data
partition completely via ADB, you need to run adb root
. (more help..)