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?

Method 1:

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