7

I can run

adb pull /data/data/com.xlythe.saolauncher/databases ./

or

adb pull /data/data/com.xlythe.saolauncher/files ./

and it works fine. However, if I try

adb pull /data/data/com.xlythe.saolauncher ./

It fails with the error:

adb: error: failed to copy '/data/data/com.xlythe.saolauncher/lib' to './com.xlythe.saolauncher/lib': remote No such file or directory

It happens because the lib folder is actually a symlink to /data/app-lib/com.xlythe.saolauncher

Now, if I wanted only com.xlythe.saolauncher I would just do it by hand copying one folder at time, but I want instead to pull all /data/data at once.
So I need a way to tell ADB to just skip symlinks instead of failing the copy.
Any hints?

0

1 Answer 1

8

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..)

2
  • 2
    +1 I had to join this site just to give an upvote to this answer (Method 1) which really helped me. :) Jul 29, 2018 at 0:47
  • 1
    Creating a tar archive may fail because of combining stdout and stderr. Try adb shell 'tar -cf - data 2>/dev/null' | gzip -9 > backup.tar.gz instead. Mar 29, 2019 at 18:30

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .