Каков наилучший способ вытащить несколько файлов с помощью
adb pull
У меня есть мои файлы /sdcard/
25 со следующим именем:
gps1.trace
gps2.trace
...
gps25.trace
Подстановочный файл не работает:
adb pull /sdcard/gps*.trace .
Каков наилучший способ вытащить несколько файлов с помощью
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
может получить имя каталога вместо файла, и он вытащит каталог со всеми файлами в нем.
Потяните все ваши следы gps в /sdcard/gpsTraces
adb pull /sdcard/gpsTraces/ .
Пример adb pull
и adb push
рекурсивных каталогов:
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
< - fail
./adb pull /sdcard/
< - работает рекурсивно - обратите внимание на конечную косую черту
Протестировано с Nexus 5 и adb загружено в марте 2014 года.
ADBFS файловая система FUSE для Android Debug Bridge, если вы используете linux или mac
Я создал это для окон Windows. Очень полезно передавать файлы с помощью подстановочных знаков без установки файловой системы. Вы можете включить этот script где-то в вашем пути env.
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*
Вывод каталога доступен в новых инструментах для 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)
Несмотря на то, что команда adb pull
начала принимать имя папки для удаленного параметра, я по-прежнему предпочитаю использовать команду tar
. Он обеспечивает большую гибкость - позволяет использовать шаблоны имен файлов (оба включают и исключать), управление символами, сохраняет права доступа к файлам. С Android 6.0 вы можете использовать встроенный. До этого вам приходилось использовать сторонние инструменты, такие как busybox
:
adb exec-out tar c sdcard/amazonmp3 > amazon.tar
Обязательно опустите ведущий /
в свой путь.
На основе ответа Дэвида я считаю, что это немного лучше:
adb shell ls /foo | tr -d '\r' | xargs -n1 adb pull
В дополнение к тому, что один символ меньше, чем тип (большое дело), он не преобразует -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
В моем случае работают Wild-карты, я использовал следующий простой script для импорта изображений 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 есть папка с соответствующими разрешениями! Некоторая папка принадлежит пользователю root или системе.
Вы, ребята, должны изменить разрешения этих файлов, папок, прежде чем делать "adb pull".
Следующие команды могут помочь:
adb shell
su
chmod -R 777 target_folder
exit
...
adb pull /.../target_folder/ . (current local folder)