我如何adb拉SD卡中存在的文件夹的所有文件


110

我的SD卡中有一个文件夹为: /mnt/sdcard/Folder1/Folder2/Folder3/*.jpg

Folder1和Folder2的名称保持不变,并且Folder2内有Folder3、4、5,依此类推。.我想使用adb将所有jpeg文件而不是所有文件(还有更多文件)拉到计算机上的当前目录中。 。

每个文件夹都有不同数量的jpeg文件和其他文件,我尝试使用此文件:

adb pull mnt/sdcard/Folder1/Folder2/Folder/*.jpg .

但是它没有用..所以,我如何用一个命令(单个命令,因为每个文件夹具有不同数量的文件)来adb提取SD卡任何文件夹中的所有文件。


您使用Linux还是Windows?我们可以用一个简单的脚本解决吗?
Jared Burrows 2012年

嗯,我在两者上都安装了Android开发资料:Win7和Ubuntu ..如果有解决方案,那就太好了..!但在现实中,我需要它只是对Ubuntu(安装成一个VM)..所以uhmm耶IM在Ubuntu ..
riteshtch

您能为这个问题标记正确答案吗?
Jared Burrows 2015年

Answers:


143

单个文件/文件夹使用pull

adb pull "/sdcard/Folder1"

输出:

adb pull "/sdcard/Folder1"
pull: building file list...
pull: /sdcard/Folder1/image1.jpg -> ./image1.jpg
pull: /sdcard/Folder1/image2.jpg -> ./image2.jpg
pull: /sdcard/Folder1/image3.jpg -> ./image3.jpg
3 files pulled. 0 files skipped.

具体的文件/文件夹使用findBusyBox

adb shell find "/sdcard/Folder1" -iname "*.jpg" | tr -d '\015' | while read line; do adb pull "$line"; done;

这里是一个解释:

adb shell find "/sdcard/Folder1" - use the find command, use the top folder
-iname "*.jpg"                   - filter the output to only *.jpg files
|                                - passes data(output) from one command to another
tr -d '\015'                     - explained here: http://stackoverflow.com/questions/9664086/bash-is-removing-commands-in-while
while read line;                 - while loop to read input of previous commands
do adb pull "$line"; done;         - pull the files into the current running directory, finish. The quotation marks around $line are required to work with filenames containing spaces.

脚本将从顶部文件夹开始,然后递归查找所有“ * .jpg”文件,并将其从手机中拉至当前目录。


10
adb pull /sdcard拉全部!
伊恩·沃恩

@IanVaughan是我经常使用并为我工作的命令,但我确实希望有一种方法可以将所有数据从SD卡中
取出,

我想知道Android是否有tar吗?在ADB上进行简单的tarpipe操作可以非常精细地提取文件,元数据,但不包括排除项。如果gzip / bzip2也位于其中,则可以使用压缩的防水布:)
Mark K Cowan

对于现代版本,adb您只需指定目录,该工具就会为您递归提取所有内容
DirkyJerky

@ mark-k-cowan带有共享(sdcard)的adb备份存在很多错误。
Smeterlink

72

目录提取功能可在新的android工具上使用。(我不知道它是从哪个版本添加的,但是它可以在最新的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)

1
我试过了,但是只拉了一些目录。不知道它的标准是什么。
2014年

2
如果要提取root拥有的文件夹,请启动adb根会话(使用$ adb root)。
MasterAM 2014年

以root身份运行命令,就像@MasterAM所说!工作没有问题!干杯!
Migisha 2015年

@acjay省略空文件夹。对于最终为空的递归文件夹也是如此。例如/sdcard/folder1/folder2folder1如果folder2为空且folder1。下没有其他文件,则将被忽略。
MDMower

40

请尝试仅给出您要拉出文件的路径,我刚刚从sdcard获得了文件,例如

adb pull sdcard/

不要给*喜欢扩大搜索范围或过滤掉。例如:adb pull sdcard / *。txt->无效。

只是给亚行拉SD卡/


这是一个更清洁的解决方案。从语义上讲它更好,并且也保留了目录结构。
Mike Mike

11
请注意,尾部/ 确实很重要
adrin

我不需要使用adb 1.0.40版结尾的斜杠
Miserable Variable

6

是的,只需使用斜杠来递归拉目录。适用于Nexus 5和当前版本的adb(2014年3月)。


我不需要使用adb 1.0.40版结尾的斜杠
Miserable Variable

我需要在Google像素XL上运行Android Q的Android Debug Bridge版本1.0.32的末尾加斜线。
Rock Lee)

2

在具有ADB 1.0.32版的Android 6上,您必须将/放在要复制的文件夹后面。例如adb pull "/sdcard/".


我不需要使用adb 1.0.40版结尾的斜杠
Miserable Variable

1

如果您使用的软糖刚启动cmd,请键入adb设备以确保您可读,然后键入adb pull sdcard / sdcard_(日期或其他日期)<-此文件需要事先在adb目录中创建。利润!

在其他版本中,键入adb pull mnt / sdcard / sdcard_(日期或其他日期)

记住要制作文件,否则您将陷入混乱,否则将无法正常工作。


1

如果要从根设备中拉出访问受限的目录,则需要以root用户身份重新启动adb:adb root在拉之前键入。否则,您会收到一条错误消息:remote object '/data/data/xxx.example.app' does not exist

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.