11 ответов:
можно использовать
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может получить имя каталога вместо at file и он будет тянуть каталог со всеми файлами в нем.потяните все ваши 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)
ADBFS A FUSE Filesystem для Android Debug Bridge Если вы используете linux или mac
Я создал это для окон, это очень полезно для передачи файлов с помощью подстановочных знаков без монтажа файловой системы. Вы можете включить этот скрипт где-то в вашем пути env.
adbpull.летучая мышь
@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*
каталог pull доступен на новых инструментах 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команда начала принимать имя папки для удаленного параметра, я все еще предпочитаю использовать . Он обеспечивает большую гибкость-позволяет использовать шаблоны имен файлов (оба включить и исключить), управление символической ссылкой, сохраняет права доступа к файлам. С Android 6.0 вы можете использовать встроенный. До этого вам приходилось использовать сторонние инструменты, такие какbusybox:adb exec-out tar c sdcard/amazonmp3 > amazon.tarубедитесь в том, чтобы опустить ведущий
/на вашем пути.
разбор вывода из 'ls', как правило, плохая идея. Вместо этого используйте "найти".
adb shell 'find /sdcard/ -name "gps*.trace" -print0' | xargs -0 -n 1 adb pull
основываясь на ответе Дэвида, я считаю, что это немного лучше:
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 есть некоторые папки с соответствующими разрешениями! Некоторые папки принадлежат корневому или системному пользователю.
вы, ребята, должны изменить разрешения этих файлов, папок, прежде чем делать "adb pull".
следующие команды могут помочь:
adb shell su chmod -R 777 target_folder exit ... adb pull /.../target_folder/ . (current local folder)
Comments