ADB 拉取/data/data 文件夹时跳过符号链接的问题解决方法

6次阅读
没有评论

问题描述

使用 adb pull 命令从 Android 设备拉取 /data/data 文件夹时,如果其中某些文件夹是符号链接(symlink),则会失败。例如,尝试拉取整个 /data/data 文件夹时,会因为符号链接的存在而失败。此时需要一种方法来告诉 adb pull 跳过这些符号链接,而不是直接失败。

解决方案

请注意以下操作可能需要设备root权限,请确保已经获取root权限。

方法1

如果可以接受将结果文件压缩为 .tar 归档文件,则可以使用以下命令:

adb exec-out tar c data/data > data_backup.tar

注意不要在路径前加上 /。此方法来源于 Stack Overflow

方法2

如果需要逐文件拉取文件,则可以使用以下脚本:

#!/bin/bash
#
# 运行示例: ./filename.sh <源文件夹> <目标文件夹>
# 如果不提供 <目标文件夹>,则默认保存在当前目录下。
location=$1
if [ -z "$2" ]; then
  destination=.
else
  destination=$2
fi

# 找到给定目录下的所有文件,并逐一处理
while read line
do
  # 创建文件所在的目标目录,通过移除文件名来获取完整路径
  mkdir -p $destination"${line%/*}"
  adb pull $line $destination$line
done <<< `adb shell find $location -type f`

保存上述脚本为 adb_pull.sh,并执行 chmod 777 adb_pull.sh,然后运行:

./adb_pull.sh /data/data data_backup

所有 /data/data 目录下的内容将被保存到 data_backup 文件夹中。注意不要在源文件夹路径后加上 /

测试:此脚本已在 Ubuntu 17.04 上测试,并成功应用于 Android 7.1 设备。为了访问 /data 分区,需要先执行 adb root 命令。

注意事项:确保已获取设备root权限,否则无法访问 /data 分区。

通过以上两种方法,可以有效地解决在使用 adb pull 时遇到的符号链接问题。

正文完