adb拉多个文件

什么是使用拉多个文件的最佳方法

adb pull 

我在我的/sdcard/ 25文件中有以下名称:

 gps1.trace gps2.trace ... gps25.trace 

通配符不起作用:

 adb pull /sdcard/gps*.trace . 

您可以使用xargs和接受通配符的adb shell ls命令的结果。 这使您可以复制多个文件。 烦恼的是, adb shell ls命令的输出包含了可以使用tr -d '\r'删除的换行符控制字符。

例子:

 adb shell 'ls sdcard/gps*.trace' | tr -d '\r' | xargs -n1 adb pull adb shell 'ls /sdcard/*.txt' | tr -d '\r' | sed -e 's/^\///' | xargs -n1 adb pull 

adb pull可以接收一个目录名而不是文件,它将会把目录中的所有文件都拉进去。

在/ sdcard / gpsTraces中拉出所有的GPS跟踪

 adb pull /sdcard/gpsTraces/ . 

adb pulladb pushrecursion目录的例子:

 C:\Test>adb pull /data/misc/test/ . pull: building file list... pull: /data/misc/test/test1/test2/test.3 -> ./test1/test2/test.3 pull: /data/misc/test/test1/test2/test.2 -> ./test1/test2/test.2 pull: /data/misc/test/test1/test2/test.1 -> ./test1/test2/test.1 pull: /data/misc/test/test1/test.3 -> ./test1/test.3 pull: /data/misc/test/test1/test.2 -> ./test1/test.2 pull: /data/misc/test/test1/test.1 -> ./test1/test.1 pull: /data/misc/test/test.3 -> ./test.3 pull: /data/misc/test/test.2 -> ./test.2 pull: /data/misc/test/test.1 -> ./test.1 9 files pulled. 0 files skipped. 0 KB/s (45 bytes in 0.093s) C:\Test>adb push . /data/misc/test/ push: ./test1/test2/test.3 -> /data/misc/test/test1/test2/test.3 push: ./test1/test2/test.2 -> /data/misc/test/test1/test2/test.2 push: ./test1/test2/test.1 -> /data/misc/test/test1/test2/test.1 push: ./test1/test.3 -> /data/misc/test/test1/test.3 push: ./test1/test.2 -> /data/misc/test/test1/test.2 push: ./test1/test.1 -> /data/misc/test/test1/test.1 push: ./test.3 -> /data/misc/test/test.3 push: ./test.2 -> /data/misc/test/test.2 push: ./test.1 -> /data/misc/test/test.1 9 files pushed. 0 files skipped. 0 KB/s (45 bytes in 0.062s) 

./adb pull /sdcard < – 失败

./adb pull /sdcard/ < – recursion地工作 – 注意尾部的斜杠

testing了2014年3月下载的Nexus 5和adb。

如果您使用的是Linux或Mac,则ADBFS为Androiddebugging桥提供FUSE文件系统

目录拉是可用的新的Android工具。 (我不知道它是从哪个版本join的,但是它使用最新的ADT 21.1)

 adb pull /sdcard/Robotium-Screenshots pull: building file list... pull: /sdcard/Robotium-Screenshots/090313-110415.jpg -> ./090313-110415.jpg pull: /sdcard/Robotium-Screenshots/090313-110412.jpg -> ./090313-110412.jpg pull: /sdcard/Robotium-Screenshots/090313-110408.jpg -> ./090313-110408.jpg pull: /sdcard/Robotium-Screenshots/090313-110406.jpg -> ./090313-110406.jpg pull: /sdcard/Robotium-Screenshots/090313-110404.jpg -> ./090313-110404.jpg 5 files pulled. 0 files skipped. 61 KB/s (338736 bytes in 5.409s) 

我已经创build了这个Windows的框,这是非常有用的传输文件使用通配符,而无需挂载文件系统。 你可以在你的pathenv的某个地方包含这个脚本。

adbpull.bat

 @echo off setlocal enabledelayedexpansion if %1.==. ( echo Wilcard parameter is required. goto end ) for /F "tokens=* USEBACKQ" %%F in (`adb shell ls %1`) do ( set text=%%F set mfile=!text:~0,-1! adb pull "!mfile!" ) :end endlocal 

例如: adbpull /sdcard/DCIM/Camera/IMG_2016*

即使adb pull命令开始接受远程参数的文件夹名称,我仍然喜欢使用tar命令。 它提供了更多的灵活性 – 允许文件名模式( 包括排除 ),符号链接控制,保留文件权限。 由于Android 6.0可以使用内置的。 在此之前,你必须使用像busybox这样的第三方工具:

 adb exec-out tar c sdcard/amazonmp3 > amazon.tar 

确保省略前导/在你的path。

build立在大卫的答案上,我发现这会稍微好一些:

 adb shell ls /foo | tr -d '\r' | xargs -n1 adb pull 

除了less一个字符(大处理)之外,它不会将-r转换为空格。 这是一个显着的差异,就像你试图做的一样

 adb shell ls /foo/myFile* | tr '\r' ' ' | xargs -i -n1 adb pull {} someDir 

你会得到错误的说法

 remote object '/foo/myFile1 ' does not exist 

相反,你可以做到这一点,这将工作:

 adb shell ls /foo/myFile* | tr -d '\r' | xargs -i -n1 adb pull {} someDir 

通配符在我的情况下工作,我一直在使用以下简单的脚本将我的虚拟设备的Whatsapp图像导入到我的桌面

 #! /bin/bash mkdir -p ~/Pictures/Pictures_adb rm -f ~/Pictures/Pictures_adb/* cd ~/Pictures/Pictures_adb adb root adb shell 'cp /data/media/0/WhatsApp/Media/WhatsApp\ Profile\ Photos/* /sdcard/Pictures/;exit' adb pull /sdcard/Pictures mv ~/Pictures/Pictures_adb/Pictures/* ~/Pictures/Pictures_adb/ rmdir ~/Pictures/Pictures_adb/Pictures cd 

在Android中,有一些文件夹与相关的权限! 某些文件夹属于根用户或系统用户。

你们应该在做“adb pull”之前更改这些文件,文件夹的权限。

以下命令可以帮助:

 adb shell su chmod -R 777 target_folder exit ... adb pull /.../target_folder/ . (current local folder)