Який найкращий спосіб отримати кілька файлів за допомогою
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 .
DDMS
перспективі затемнення і зміг багаторазово вибрати файли зі своєї SD-карти та виконати pull
на них. Якщо ви не використовуєте eclipse, DDMS доступний як окремий інструмент SDK.
monitor
команда працює чудово, вона повинна бути <sdkdir>/tools
!
Відповіді:
Ви можете використовувати 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 shell "ls -d /mnt/sdcard/Pictures/Screenshots/*" | tr '\r' ' ' | 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
<- не вдається
./adb pull /sdcard/
<- працює рекурсивно - зверніть увагу на кісну риску
Тестується на Nexus 5 та adb, завантаженому в березні 2014 року.
Синтаксичний аналіз виводу з ls - це, як правило, погана ідея. Натомість використовуйте "знайти".
adb shell 'find /sdcard/ -name "gps*.trace" -print0' | xargs -0 -n 1 adb pull
Незважаючи на те, що adb pull
команда почала приймати ім'я папки для віддаленого параметра, я все одно вважаю за краще використовувати tar
команду. Це забезпечує більшу гнучкість - дозволяє створювати шаблони імен файлів (як включати, так і виключати ), керування символічними посиланнями, зберігає дозволи файлів. З Android 6.0 ви можете використовувати вбудований. До цього вам доводилося використовувати сторонні інструменти, такі як busybox
:
adb exec-out tar c sdcard/amazonmp3 > amazon.tar
Обов’язково пропустіть провідне /
на своєму шляху.
Я створив це для вікон Windows. Дуже корисно передавати файли за допомогою підстановних знаків без монтажу файлової системи. Ви можете включити цей сценарій десь у свій шлях 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*
ADBFS файлову систему FUSE для моста налагодження Android, якщо ви використовуєте Linux або Mac
Витяг каталогів доступний на нових інструментах 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 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
У моєму випадку працюють дикі картки, я використовую такий простий сценарій для імпорту зображень 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)
adb
але з документівpull
можна використовувати для витягування цілого каталогу ??? Якщо це так, і це файли, створені вашим власним додатком, то чому б не записати їх у підкаталог, такий як,/sdcard/mygpsfiles
а потім використовуватиadb pull /sdcard/mygpsfiles
. Це спрацювало б?