¿Cuál es la mejor manera de extraer varios archivos usando
adb pull
Tengo en mis /sdcard/
25 archivos con el siguiente nombre:
gps1.trace
gps2.trace
...
gps25.trace
El comodín no funciona:
adb pull /sdcard/gps*.trace .
¿Cuál es la mejor manera de extraer varios archivos usando
adb pull
Tengo en mis /sdcard/
25 archivos con el siguiente nombre:
gps1.trace
gps2.trace
...
gps25.trace
El comodín no funciona:
adb pull /sdcard/gps*.trace .
DDMS
perspectiva de eclipse y pude seleccionar varios archivos de mi tarjeta SD y realizar una pull
en ellos. Si no usa eclipse, DDMS está disponible como una herramienta SDK separada.
monitor
comando funciona muy bien, debería estar en <sdkdir>/tools
!
Respuestas:
Puede utilizar xargs
y el resultado del adb shell ls
comando que acepta comodines. Esto le permite copiar varios archivos. Es molesto que la salida del adb shell ls
comando incluya caracteres de control de avance de línea que puede eliminar usando tr -d '\r'
.
Ejemplos:
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
puede recibir un nombre de directorio en lugar de un archivo y extraerá el directorio con todos los archivos en él.
Extraiga todos sus rastreos gps en / sdcard / gpsTraces
adb pull /sdcard/gpsTraces/ .
Ejemplo de adb pull
y adb push
de directorios recursivos:
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
<- falla
./adb pull /sdcard/
<- funciona de forma recursiva - observe la barra al final
Probado con Nexus 5 y adb descargado en marzo de 2014.
Analizar la salida de 'ls' es generalmente una mala idea. En su lugar, use 'buscar'.
adb shell 'find /sdcard/ -name "gps*.trace" -print0' | xargs -0 -n 1 adb pull
Aunque el adb pull
comando comenzó a aceptar el nombre de la carpeta para el parámetro remoto, todavía prefiero usar el tar
comando. Proporciona más flexibilidad: permite patrones de nombre de archivo (tanto de inclusión como de exclusión ), control de enlaces simbólicos, conserva los permisos de archivo. Desde Android 6.0 puede utilizar un archivo. Antes de eso, tenías que usar herramientas de terceros como busybox
:
adb exec-out tar c sdcard/amazonmp3 > amazon.tar
Asegúrese de omitir la guía /
en su camino.
He creado esto para cajas de Windows. Es muy útil transferir archivos usando comodines sin montar el sistema de archivos. Puede incluir este script en algún lugar de su ruta 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
Ejemplo:
adbpull /sdcard/DCIM/Camera/IMG_2016*
ADBFS a FUSE Filesystem para Android Debug Bridge si está usando linux o mac
La extracción de directorios está disponible en las nuevas herramientas de Android. (No sé de qué versión se agregó, pero está funcionando en el último 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)
basándose en la respuesta de David, encuentro que esto es un poco mejor:
adb shell ls /foo | tr -d '\r' | xargs -n1 adb pull
Además de ser un carácter menos para escribir (gran cosa), no convierte el -r
en un espacio. Esta es una diferencia significativa, como si intentara hacer
adb shell ls /foo/myFile* | tr '\r' ' ' | xargs -i -n1 adb pull {} someDir
obtendrá un error diciendo
remote object '/foo/myFile1 ' does not exist
En su lugar, puede hacer esto, que funcionará:
adb shell ls /foo/myFile* | tr -d '\r' | xargs -i -n1 adb pull {} someDir
Los comodines funcionan en mi caso, he estado usando el siguiente script simple para importar imágenes de Whatsapp de mi dispositivo virtual en mi escritorio
#! /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
En Android, hay algunas carpetas con permisos asociados. Algunas carpetas pertenecen al usuario root o del sistema.
Ustedes deberían cambiar los permisos de esos archivos, carpetas antes de hacer "adb pull".
Los siguientes comandos podrían ayudar:
adb shell
su
chmod -R 777 target_folder
exit
...
adb pull /.../target_folder/ . (current local folder)
adb
pero de los documentospull
se puede usar para extraer un directorio completo. Si ese es el caso y estos son archivos generados por su propia aplicación, ¿por qué no escribirlos en un subdirectorio como/sdcard/mygpsfiles
y luego usarlosadb pull /sdcard/mygpsfiles
? Funcionaría eso?