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 pull
和adb push
recursion目录的例子:
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)