Làm cách nào để adb kéo TẤT CẢ các tệp của một thư mục có trong Thẻ SD


110

Tôi có một thư mục trong Thẻ SD của mình là: /mnt/sdcard/Folder1/Folder2/Folder3/*.jpg

Tên của Folder1 và Folder2 không đổi và bên trong Folder2 tôi có Folder3, 4, 5, v.v. Tôi muốn kéo tất cả các tệp jpeg hơn là tất cả các tệp (có nhiều hơn nữa) bằng cách sử dụng adb vào thư mục hiện tại của tôi trên máy tính. .

Mỗi thư mục có số lượng tệp jpeg và các tệp khác khác nhau và tôi đã thử sử dụng điều này:

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

Nhưng nó không hoạt động .. Vậy uhmm làm cách nào để tôi có thể kéo tất cả các tệp có trong bất kỳ thư mục nào của Thẻ SD bằng một lệnh duy nhất (lệnh duy nhất vì mỗi thư mục có số tệp khác nhau)


Bạn đang sử dụng Linux hay Windows? Điều này chúng ta có thể giải quyết bằng một script đơn giản không?
Jared Burrows

Rất tiếc, tôi đã cài đặt Nội dung phát triển Android trên cả Win7 cũng như Ubuntu .. nếu có giải pháp cho cả hai thì tốt và tốt ..! Nhưng trong thực tế tôi cần nó chỉ dành cho Ubuntu (được cài đặt như một máy ảo) .. vì vậy uhmm vâng im trên Ubuntu ..
riteshtch

bạn có thể vui lòng đánh dấu một câu trả lời đúng cho câu hỏi này không?
Jared Burrows

Câu trả lời:


143

Tệp / Thư mục đơn sử dụng pull:

adb pull "/sdcard/Folder1"

Đầu ra:

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.

Tệp / Thư mục cụ thể sử dụng findtừ BusyBox:

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

Đây là lời giải thích:

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.

Các tập lệnh sẽ bắt đầu trong thư mục trên cùng và đệ quy đi xuống và tìm tất cả các tệp "* .jpg" và kéo chúng từ điện thoại của bạn đến thư mục hiện tại.


10
adb pull /sdcardđể kéo tất cả!
Ian Vaughan

@IanVaughan đó là một lệnh tôi sử dụng thường xuyên và làm việc cho tôi nhưng tôi mong muốn là có một cách để kéo tất cả mọi thứ ra khỏi thẻ sd nhưng loại trừ một trong những con đường tiểu
GμårÐïåñ

Tôi tự hỏi nếu Android có tar? Một bản tóm tắt đơn giản trên ADB sẽ cho phép kéo các tệp, siêu dữ liệu rất chi tiết, nhưng có loại trừ. Nếu gzip / bzip2 cũng đang ở đó, sau đó một tarpipe nén sẽ có sẵn :)
Đánh K Cowan

Đối với hiện đại phiên bản của adbbạn chỉ có thể chỉ định thư mục và công cụ sẽ recursivly kéo tất cả mọi thứ cho bạn
DirkyJerky

@ mark-k-cowan sao lưu adb bằng chia sẻ (sdcard) có rất nhiều lỗi.
Smeterlink

72

Kéo thư mục có sẵn trên các công cụ Android mới. (Tôi không biết nó được thêm vào từ phiên bản nào, nhưng nó hoạt động trên ADT 21.1 mới nhất)

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
Tôi đã thử điều này, nhưng nó chỉ kéo một số thư mục. Không chắc chắn tiêu chí của nó là gì.
acjay

2
Nếu bạn muốn kéo một thư mục do root sở hữu , hãy bắt đầu adbphiên root (sử dụng $ adb root).
MasterAM

chạy lệnh dưới quyền root giống như @MasterAM đã nói! đã làm việc mà không có vấn đề gì! chúc mừng!
Migisha

@acjay Các thư mục trống được bỏ qua. Điều này cũng đúng với các thư mục đệ quy cuối cùng trống. Ví dụ: /sdcard/folder1/folder2sẽ dẫn đến folder1việc bị bỏ qua nếu folder2trống và không có tệp nào khác bên dưới folder1.
MDMower

40

Vui lòng thử chỉ với việc đưa ra đường dẫn từ nơi bạn muốn kéo các tệp mà tôi vừa lấy các tệp từ sdcard như

adb pull sdcard/

KHÔNG cung cấp cho * như để mở rộng tìm kiếm hoặc để lọc ra. ví dụ: adb pull sdcard / *. txt -> cái này không hợp lệ.

chỉ cần cho adb kéo sdcard /


Đây là một giải pháp sạch hơn nhiều. Nó tốt hơn về mặt ngữ nghĩa và bảo toàn cấu trúc thư mục.
Mike

11
Lưu ý rằng dấu vết / không thành công .
adrin

Tôi không cần trailing slash với phiên bản adb 1.0.40
Biến khốn khổ

6

Đúng, chỉ cần sử dụng dấu gạch chéo để kéo thư mục một cách đệ quy. Phù hợp với tôi với Nexus 5 và phiên bản adb hiện tại (tháng 3 năm 2014).


Tôi không cần trailing slash với phiên bản adb 1.0.40
Biến khốn khổ

Tôi cần dấu gạch chéo trên Android Debug Bridge phiên bản 1.0.32 chạy Android Q trên Google Pixel XL.
Rock Lee

2

Trên Android 6 với phiên bản ADB 1.0.32, bạn phải đặt / phía sau thư mục bạn muốn sao chép. Ví dụadb pull "/sdcard/".


Tôi không cần trailing slash với phiên bản adb 1.0.40
Biến khốn khổ

1

nếu bạn đang sử dụng Jellybean chỉ cần bắt đầu cmd, hãy nhập thiết bị adb để đảm bảo bạn có thể đọc được, nhập adb pull sdcard / sdcard_ (ngày hoặc thêm) <--- tệp này cần được tạo trong thư mục adb trước. LỢI NHUẬN!

Trong các phiên bản khác, nhập adb pull mnt / sdcard / sdcard_ (ngày hoặc thêm)

Hãy nhớ làm cho tệp của bạn hoặc của bạn sẽ có một mớ hỗn độn hoặc nó sẽ không hoạt động.


1

Nếu bạn muốn kéo một thư mục có quyền truy cập hạn chế từ thiết bị đã root, bạn cần khởi động lại adb với tư cách root: gõ adb roottrước khi kéo. Nếu không, bạn sẽ gặp lỗi nóiremote object '/data/data/xxx.example.app' does not exist

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.