Cách tốt nhất để kéo nhiều tệp bằng cách sử dụng
adb pull
Tôi có trên /sdcard/
25 tệp của mình với tên sau:
gps1.trace
gps2.trace
...
gps25.trace
Ký tự đại diện không hoạt động:
adb pull /sdcard/gps*.trace .
Cách tốt nhất để kéo nhiều tệp bằng cách sử dụng
adb pull
Tôi có trên /sdcard/
25 tệp của mình với tên sau:
gps1.trace
gps2.trace
...
gps25.trace
Ký tự đại diện không hoạt động:
adb pull /sdcard/gps*.trace .
DDMS
góc nhìn của nhật thực và có thể chọn nhiều tệp từ sdcard của mình và thực hiện pull
trên chúng. Nếu bạn không sử dụng eclipse, DDMS có sẵn như một công cụ SDK riêng biệt.
monitor
lệnh hoạt động tuyệt vời, nên được trong <sdkdir>/tools
!
Câu trả lời:
Bạn có thể sử dụng xargs
và kết quả của adb shell ls
lệnh chấp nhận các ký tự đại diện. Điều này cho phép bạn sao chép nhiều tệp. Thật khó chịu khi đầu ra của adb shell ls
lệnh bao gồm các ký tự điều khiển nguồn cấp dữ liệu dòng mà bạn có thể xóa bằng cách sử dụng tr -d '\r'
.
Ví dụ:
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 shell "ls -d /mnt/sdcard/Pictures/Screenshots/*" | tr '\r' ' ' | xargs -n1 adb pull
adb pull
có thể nhận một tên thư mục thay vì tại tệp và nó sẽ kéo thư mục có tất cả các tệp trong đó.
Kéo tất cả các dấu vết gps của bạn vào / sdcard / gpsTraces
adb pull /sdcard/gpsTraces/ .
Ví dụ về adb pull
và adb push
về thư mục đệ quy:
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
<- không thành công
./adb pull /sdcard/
<- hoạt động đệ quy - lưu ý dấu gạch chéo ở cuối
Đã thử nghiệm với Nexus 5 và adb tải xuống tháng 3 năm 2014.
Phân tích cú pháp đầu ra từ 'ls' nói chung là một ý tưởng tồi. Thay vào đó, hãy sử dụng 'find'.
adb shell 'find /sdcard/ -name "gps*.trace" -print0' | xargs -0 -n 1 adb pull
Mặc dù adb pull
lệnh bắt đầu chấp nhận tên thư mục cho tham số từ xa, tôi vẫn thích sử dụng tar
lệnh hơn. Nó cung cấp tính linh hoạt hơn - cho phép các mẫu tên tệp (cả bao gồm và loại trừ ), kiểm soát liên kết biểu tượng, duy trì quyền đối với tệp. Kể từ Android 6.0, bạn có thể sử dụng cài sẵn. Trước đó, bạn phải sử dụng các công cụ của bên thứ 3 như busybox
:
adb exec-out tar c sdcard/amazonmp3 > amazon.tar
Đảm bảo bỏ qua phần dẫn đầu /
trong con đường của bạn.
Tôi đã tạo hộp này cho Windows, Rất hữu ích để chuyển tệp bằng ký tự đại diện mà không cần gắn hệ thống tệp. Bạn có thể đưa tập lệnh này vào đâu đó trong env đường dẫn của mình.
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
Thí dụ:
adbpull /sdcard/DCIM/Camera/IMG_2016*
ADBFS a FUSE Filesystem cho Android Debug Bridge nếu bạn đang sử dụng linux hoặc mac
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)
dựa trên câu trả lời của David, tôi thấy điều này sẽ tốt hơn một chút:
adb shell ls /foo | tr -d '\r' | xargs -n1 adb pull
Ngoài việc nó là một ký tự ít hơn để nhập (vấn đề lớn), nó không chuyển đổi -r
thành một khoảng trắng. Đây là một sự khác biệt đáng kể, như thể bạn cố gắng làm
adb shell ls /foo/myFile* | tr '\r' ' ' | xargs -i -n1 adb pull {} someDir
bạn sẽ gặp lỗi khi nói
remote object '/foo/myFile1 ' does not exist
Thay vào đó, bạn có thể làm điều này, cách này sẽ hoạt động:
adb shell ls /foo/myFile* | tr -d '\r' | xargs -i -n1 adb pull {} someDir
Thẻ Wild hoạt động trong trường hợp của tôi, tôi đã sử dụng tập lệnh đơn giản sau để nhập Hình ảnh Whatsapp của thiết bị ảo vào máy tính để bàn của tôi
#! /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
Trong Android, có một số thư mục có các quyền liên quan! Một số thư mục thuộc về người dùng gốc hoặc hệ thống.
Các bạn nên thay đổi quyền của các tập tin, thư mục đó trước khi thực hiện "kéo adb".
Các lệnh sau có thể giúp:
adb shell
su
chmod -R 777 target_folder
exit
...
adb pull /.../target_folder/ . (current local folder)
adb
nhưng từ tài liệupull
có thể được sử dụng để kéo toàn bộ thư mục ??? Nếu đúng như vậy và đây là các tệp được tạo bởi ứng dụng của riêng bạn thì tại sao không ghi chúng vào một thư mục con chẳng hạn như/sdcard/mygpsfiles
sau đó sử dụngadb pull /sdcard/mygpsfiles
. Liệu điều đó có hiệu quả?