adb命令复制文件是Android调试桥(Android Debug Bridge)中非常常用且实用的功能,主要用于在Android设备与计算机之间、或设备内部进行文件传输,无论是开发者调试应用时需要替换资源文件,还是普通用户备份重要数据,adb的文件复制能力都能高效完成任务,以下将从基础命令、高级用法、常见场景及注意事项等方面进行详细阐述。

adb文件复制的基础命令
adb的文件复制核心命令是adb pull和adb push,分别对应“从设备拉取到电脑”和“从电脑推送到设备”,这两条命令的基础语法相对简单,但结合参数可实现灵活操作。
adb pull:从设备复制文件到电脑
- 基础语法:
adb pull [设备路径] [电脑路径] - 功能说明:将设备上的指定文件或目录复制到计算机的指定位置,若电脑路径省略,则默认复制到当前执行命令的目录下。
- 示例:
- 复制设备单文件:
adb pull /sdcard/Download/test.txt D:\backup\(将设备上的test.txt复制到电脑D盘backup文件夹) - 复制设备整个目录:
adb pull /sdcard/Photos/ D:\backup\Photos(注意:目标路径末尾的“\”表示在目标位置创建同名目录,若无“\”则目录内容会被直接复制到D:\backup下)
- 复制设备单文件:
adb push:从电脑复制文件到设备
- 基础语法:
adb push [电脑路径] [设备路径] - 功能说明:将计算机上的文件或目录推送到设备的指定位置,要求设备路径必须已存在(如/sdcard/、/data/local/tmp/等),否则会报错。
- 示例:
- 复制电脑单文件:
adb push D:\temp\app.apk /sdcard/Download/ - 复制电脑整个目录:
adb push D:\assets\ /sdcard/CustomAssets/(将assets文件夹内的所有内容复制到设备的CustomAssets目录)
- 复制电脑单文件:
高级参数与技巧
在实际操作中,基础命令可能无法满足复杂需求,此时可通过参数或组合命令实现更精细的控制。
参数控制
-p(显示进度):在传输大文件时,通过adb pull -p或adb push -p实时显示复制进度,便于监控传输状态。-a(保留时间戳):使用adb push -a可保留文件的原始时间戳(修改时间),适用于需要精确记录文件时间的场景。-s(指定设备):当多台设备同时连接时,通过adb -s <设备序列号> push/pull指定操作目标,例如adb -s emulator-5554 push test.txt /sdcard/。
设备内部文件复制
adb不仅支持设备与电脑间的传输,还可通过adb shell命令实现设备内部的文件复制,语法与Linux的cp命令一致:
- 基础复制:
adb shell "cp /sdcard/source.txt /sdcard/backup/" - 递归复制目录:
adb shell "cp -r /sdcard/DCIM/ /sdcard/Backup/" - 强制覆盖:
adb shell "cp -f /sdcard/temp.txt /sdcard/old.txt"
大文件与批量处理
- 大文件分块:对于超大文件(如超过2GB),需确保设备与电脑的文件系统支持(如exFAT),且避免通过USB 2.0接口传输,以降低失败概率。
- 批量复制:结合Windows批处理或Linux Shell脚本可批量操作,在Windows中创建
copy_files.bat:@echo off adb pull /sdcard/DCIM/Camera/ D:\backup\Camera\ adb pull /sdcard/Pictures/ D:\backup\Pictures\ echo 备份完成! pause
常见应用场景
应用数据备份与恢复
- 备份应用私有数据:需root权限,通过
adb shell "cp -r /data/data/com.example.app/ /sdcard/app_backup/"备份应用数据,恢复时反向操作。 - 备份应用APK:无需root,通过
adb shell pm list packages -f查找到APK路径,再用adb pull提取,例如adb pull /data/app/com.example.app-1/base.apk D:\apk_backup\。
开发调试资源替换
- 替换应用资源:在开发过程中,可直接将修改后的资源文件(如图片、配置文件)通过
adb push推送到设备的测试目录,无需重新安装APK,例如adb push res/drawable-new/icon.png /sdcard/Android/data/com.test.app/drawable/。
系统文件修改(需root)
- 修改hosts文件:
adb root获取root权限后,adb push D:\hosts /system/etc/hosts,并执行adb shell "chmod 644 /system/etc/hosts"设置权限。
注意事项与问题排查
- 设备连接问题:确保adb版本与设备兼容,执行
adb devices确认设备已识别(状态为device),若显示unauthorized,需在设备上允许USB调试授权。 - 权限不足:系统目录(如/system/)的修改需root权限,普通用户仅能操作/sdcard/等用户可读写目录。
- 路径与空格处理:若路径包含空格,需用引号包裹,如
adb push "My Documents\file.txt" /sdcard/。 - 存储空间不足:传输前检查设备剩余空间,避免因空间不足导致传输失败。
- 文件编码问题:文本文件传输时,若出现乱码,需确保电脑与设备的编码一致(建议UTF-8)。
相关操作效率对比
| 操作场景 | 推荐命令 | 优点 | 缺点 |
|---|---|---|---|
| 小文件单次传输 | adb push/pull | 简单直接,无需额外工具 | 需手动输入路径 |
| 大文件或目录批量传输 | adb push/pull -p | 显示进度,可监控状态 | 传输速度依赖USB接口版本 |
| 设备内部文件移动 | adb shell "cp -r" | 无需电脑中介,效率高 | 需熟悉Linux命令 |
| 需保留文件属性的传输 | adb push -a | 完整保留文件元数据 | 部分设备可能不支持 |
相关问答FAQs
问题1:adb push提示“Read-only file system”错误怎么办?
解答:该错误通常是因为尝试向只读系统分区(如/system/)写入文件且未获取root权限,解决方法有两种:一是将文件推送到可写分区(如/sdcard/);二是通过adb root获取root权限后,再执行adb remount重新挂载系统分区为读写模式,之后即可推送文件,需注意,root操作存在风险,建议谨慎操作。

问题2:如何通过adb快速备份整个手机存储中的特定类型文件(如所有.jpg图片)?
解答:可结合adb shell的find命令实现,首先在设备上查找所有.jpg文件路径,再逐个拉取到电脑,具体步骤如下:
- 查找文件路径:
adb shell "find /sdcard -name '*.jpg' -print > /sdcard/jpg_list.txt" - 将路径列表复制到电脑:
adb pull /sdcard/jpg_list.txt D:\backup\ - 批量拉取文件(需批处理脚本支持):编写脚本(如Python)读取jpg_list.txt中的路径,循环执行
adb pull命令。
此方法适用于大量文件的分类备份,可避免手动逐个操作的繁琐。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/479116.html<
