Я могу бегать
adb pull /data/data/com.xlythe.saolauncher/databases ./
или
adb pull /data/data/com.xlythe.saolauncher/files ./
и это работает нормально. Однако, если я попытаюсь
adb pull /data/data/com.xlythe.saolauncher ./
Вылетает с ошибкой:
adb: ошибка: не удалось скопировать '/data/data/com.xlythe.saolauncher/lib' в './com.xlythe.saolauncher/lib': удаленный Нет такого файла или каталога
Это происходит потому, что lib
папка на самом деле является символической ссылкой на/data/app-lib/com.xlythe.saolauncher
Теперь, если бы я хотел com.xlythe.saolauncher
, я бы просто сделал это вручную, копируя одну папку за раз, но вместо этого я хочу вытащить все /data/data
сразу.
Поэтому мне нужен способ сказать ADB просто пропускать символические ссылки вместо сбоя копирования.
Любые подсказки?
Если вы не против получить выходной файл в виде .tar
архива, попробуйте следующую команду:
adb exec-out tar c data/data > data_backup.tar
Не забудьте опустить ведущий /
в своем пути. ( Источник )
Если вы хотите копировать пофайлово, используйте следующий скрипт, написанный мной:
#!/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
Сохраните его как adb_pull.sh
, запустите chmod 777 adb_pull.sh
и запустите как:
./adb_pull.sh /данные/данные data_backup
Все содержимое с /data/data
устройства Android будет сохранено в data_backup
папку.
( Примечание : НЕ указывайте исходную папку, например /data/data/
, с дополнительным /
после имени папки)
Протестировано и работает на моем Ubuntu 17.04 с использованием устройства Android 7.1.
Примечание. Чтобы /data
полностью получить доступ к разделу через ADB, вам необходимо запустить adb root
. ( больше помощи ..)
Джейсон Бассфорд
Микко Ранталайнен
tar
архива может завершиться ошибкой из-за объединения stdout и stderr.adb shell 'tar -cf - data 2>/dev/null' | gzip -9 > backup.tar.gz
Вместо этого попробуйте .