Я не использую adbно из документации pullможно вытащить весь каталог ??? Если это так, и это файлы, созданные вашим собственным приложением, почему бы не записать их в подкаталог, например, а /sdcard/mygpsfilesзатем использовать adb pull /sdcard/mygpsfiles. Это сработает?
Squonk
2
В качестве альтернативы я только что попробовал File Explorer в DDMSперспективе eclipse и смог выбрать несколько файлов с моей SD-карты и выполнить pullна них операцию . Если вы не используете eclipse, DDMS доступен как отдельный инструмент SDK.
Squonk
monitorкоманда отлично работает, должно быть в <sdkdir>/tools!
Сантош Кумар
Ответы:
142
Вы можете использовать xargsи результат adb shell lsкоманды, которая принимает подстановочные знаки. Это позволяет копировать несколько файлов. К сожалению, вывод adb shell lsкоманды включает управляющие символы перевода строки, которые можно удалить с помощью tr -d '\r'.
К вашему сведению: Windows и DOS используют «\ r \ n» для пар возврата каретки / перевода строки (т.е. не «\ n \ r»).
BrainSlugs83
3
в моем случае не удалось извлечь (правильно полученные) имена файлов из корневого каталога Android, чтобы решить эту проблему, я использовал:adb shell "ls -d /mnt/sdcard/Pictures/Screenshots/*" | tr '\r' ' ' | xargs -n1 adb pull
rupps
4
Ничего не получается сказать, что tr не распознается как внутренняя или внешняя команда
Suncatcher
101
adb pull может получить имя каталога вместо файла и будет извлекать каталог со всеми файлами в нем.
Вытяните все ваши следы gps в / sdcard / gpsTraces
@kakyo Для меня это работает с вложенными папками. проверьте, что у вас последняя версия ADB от Google. (Я использую 1.0.29)
Ofir Luzon
Да, я обнаружил, что в конце концов это работает для непустых папок. У меня было несколько пустых папок, которые не извлекались. Кроме того, кажется, что "push" нерекурсивен?
kakyo
@kakyo Я добавил к своему ответу результат рекурсивного извлечения и нажатия. Вы правы насчет пустых папок, они не выталкиваются и не выталкиваются.
Ofir Luzon
1
Осторожно: с ADB pull файлы теряют свою исходную дату изменения.
Стэн
3
@Stan: если вы не используете параметр «-a» как в «adb pull [-a] <remote> ... <local>», который, согласно справке, сохраняет временную метку и режим файла.
Rusty Gear
27
./adb pull /sdcard <- не работает
./adb pull /sdcard/ <- работает рекурсивно - обратите внимание на косую черту в конце
Протестировано с Nexus 5 и adb, скачано в марте 2014 г.
На моей машине мне нужно было использовать полный путь к adb, но в остальном это отлично работало!
Дэн Дж
Этот ответ на самом деле довольно умный. Отличная работа!
Darth Egregious
6
Несмотря на то, что adb pullкоманда начала принимать имя папки для удаленного параметра, я все же предпочитаю использовать tarкоманду. Он обеспечивает большую гибкость - позволяет использовать шаблоны имен файлов (как включать, так и исключать ), управлять символическими ссылками, сохраняет права доступа к файлам. Начиная с Android 6.0 вы можете использовать встроенный файл. До этого приходилось использовать сторонние инструменты, например busybox:
О, это не сработало. tar -tvf сообщает мне, что результат не похож на tar-архив. Ну что ж.
themuddler
Очень сильный способ! Но проблема в том, что в выходной файл добавлены ошибки / предупреждения типа «tar: удаление начального символа '/' из имен членов». Не знаю, как это устранить.
x'ES
На выходе я получаю файл размером 1,5 КБ.
Шаян
5
Я создал это для ящиков Windows. Это очень полезно для передачи файлов с использованием подстановочных знаков без монтирования файловой системы. Вы можете включить этот скрипт где-нибудь в свой путь env.
adbpull.bat
@echo off
setlocal enabledelayedexpansion
if %1.==. (
echo Wilcard parameter is required.
gotoend
)
for /F "tokens=* USEBACKQ" %%F in (`adb shell ls %1`) do (
settext=%%F
set mfile=!text:~0,-1!
adb pull "!mfile!"
)
:end
endlocal
В дополнение к тому, что для ввода на один символ меньше (большое дело), он не преобразует -rв пробел. Это существенная разница, как если бы вы пытались сделать
В моем случае подстановочные знаки работают, я использовал следующий простой скрипт для импорта изображений WhatsApp моего виртуального устройства на свой рабочий стол.
Вы используете подстановочные знаки для cp на Android, а не для подтягивания хоста, поэтому это работает. Хорошая альтернатива, хотя копирование в / sdcard / требует дополнительной памяти и утечки личных файлов на SD-карту.
user905686
0
PowerShell:
adb shell ls /sdcard/gps*.trace | foreach {adb pull $_}
adb
но из документацииpull
можно вытащить весь каталог ??? Если это так, и это файлы, созданные вашим собственным приложением, почему бы не записать их в подкаталог, например, а/sdcard/mygpsfiles
затем использоватьadb pull /sdcard/mygpsfiles
. Это сработает?DDMS
перспективе eclipse и смог выбрать несколько файлов с моей 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
Почему не следует анализировать вывод ls
источник
Несмотря на то, что
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 Debug Bridge, если вы используете 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
источник
PowerShell:
adb shell ls /sdcard/gps*.trace | foreach {adb pull $_}
источник
В Андроиде есть какая-то папка со связанными разрешениями! Некоторая папка принадлежит пользователю root или системе.
Вы, ребята, должны изменить права доступа к этим файлам и папкам, прежде чем выполнять "adb pull".
Следующие команды могут помочь:
adb shell su chmod -R 777 target_folder exit ... adb pull /.../target_folder/ . (current local folder)
источник