Android: copia recursiva con adb push

Creo que el impulso de adb está basado en archivos. Quiero ser capaz de empujar carpetas enteras. ¿Hay una manera fácil sin scripting?

¡Gracias!

Editar: Necesito trabajar con subcarpetas.

Edit: Parece que el pull de adb es recursivo pero no lo es. Así que cambié el título y la descripción en consecuencia.

Intente esto (trabajado con las subcarpetas): adb push mySourceFolder/. myDestAndroidFolder adb push mySourceFolder/. myDestAndroidFolder UPD: las carpetas vacías no se copian al dispositivo android.

Adb pull, extrae todos los archivos del directorio especificado:

 $ adb pull /mnt/sdcard/ pull: building file list... pull: /mnt/sdcard/t3.txt -> ./t3.txt pull: /mnt/sdcard/t2.txt -> ./t2.txt pull: /mnt/sdcard/t1.txt -> ./t1.txt 3 files pulled. 0 files skipped. 

o

 $ adb push . /mnt/sdcard/ push: ./t2.txt -> /mnt/sdcard/t2.txt push: ./t3.txt -> /mnt/sdcard/t3.txt push: ./t1.txt -> /mnt/sdcard/t1.txt 3 files pushed. 0 files skipped. 

Ok voy a cavar esto aún más para dar una solución completa a esto (para linux sólo, lo siento), porque google redireccionar a esto y tuve exactamente este mismo problema.

Con un simple impulso de adb, el problema es que todos los subdirectorios deben existir ANTES de hacer el empuje, que puede ser muy doloroso de lograr.

Tenga en cuenta que una solución fácil es comprimir la carpeta, empujar la cremallera y luego descomprimir en el dispositivo. Pero digamos que usted no tiene unzip en su dispositivo (altamente improbable, realmente).

Desea empujar un árbol completo con una gran cantidad de subdirectorios a su dispositivo en un directorio vacío myDirectory. Hay dos pasos:

Primero crear todos los subdirectorios, en su dispositivo de origen:

 cd <folder-containing-myDirectory> find myDirectory/ -type d -exec adb shell mkdir <path-to-folder-containing-myDirectory-in-device>/{} \; 

Este comando busca todos los subdirectorios de myDirectory (incluyendo., Por lo que si myDirectory ya existe, tendrá un mensaje de error que puede ignorar con seguridad) y para cada uno de ellos, cree el directorio correspondiente en el dispositivo.

Luego empuja todo

 adb push myDirectory/. <path-to-folder>/myDirectory 

Me doy cuenta de que esta pregunta es un poco vieja y estoy a punto de mencionar scripting cuando la pregunta lo excluyó, pero voy a responder de todos modos. Sobre todo, porque me gustaría haber encontrado esta respuesta aquí, antes de tener que resolverlo yo mismo.

Adb push funcionará recursivamente, si todas las subcarpetas ya están presentes. Pueden estar vacíos, parece que el push de adb no puede hacer carpetas. He encontrado que esto es una distinción útil porque uno podría ejecutar una serie de comandos como este:

 $ adb shell mkdir /folder $ adb shell mkdir /folder/sub1 $ adb shell mkdir /folder/sub2 $ adb push folder 

Por lo tanto, sí, uno podría hacer un pequeño script de envoltura para hacer esto automáticamente. Sin embargo, creo que el punto más importante es que sólo requiere que las carpetas para estar allí. Lo que significa que si esto es algo que va a actualizar varias veces en la misma carpeta. Por ejemplo, agregar imágenes a una estructura de subcarpeta existente funcionaría muy bien una y otra vez con el solo comando de empuje de adb.

Funcionó en esto también y encontró este artículo útil, pero puede haber encontrado una solución más completa. Ejecutando lo siguiente desde la carpeta que contiene los archivos / carpetas que desea empujar:

adb push . /myDestinationFolder

La clave es el prefijo '/' antes de la carpeta de destino aparentemente. Esto funciona desde mi ventana de comandos de Windows, pero cuando lo ejecuto desde git bash (en Windows) consigo algunos errores debido al significado de la '/' en una ruta dentro de la shell de bash. Así que esto puede no funcionar desde linux / bash, sin embargo definitivamente copiado todas las subcarpetas para mí.

Para ampliar el autra de autra , respondió un poco, hice un script rápido para automatizar esto (solo para Linux / Mac).

Creé un archivo vacío en mi directorio personal llamado adb-push . Luego edité el archivo con un editor de texto (como gedit, nano, vim, etc) y poner los siguientes contenidos en él:

 #!/bin/bash # Usage: # adb-push <directory-on-computer-to-send> <directory-on-device-to-receive-it> # Example: # adb-push ~/backups/DCIM /sdcard src="${1}"; trgt="$(basename ${1})"; dst="$(echo "${2}" | grep '/$')"; # If ${dst} ends with '/', remove the trailing '/'. if [ -n "${dst}" ]; then dst="${dst%/*}"; fi; # If ${src} is a directory, make directories on device before pushing them. if [ -d "${src}" ]; then cd "${src}"; cd ..; trgt="${trgt}/"; find "${trgt}" -type d -exec adb shell mkdir "${dst}/{}" \; fi; adb push "${src}" "${dst}/${trgt}"; 

Entonces lo hice ejecutable:

 chmod +x ~/adb-push; 

Así es como lo ejecuto:

 ~/adb-push <directory-on-computer-to-send> <directory-on-device-to-receive-it> 

Por ejemplo, si quiero enviar " ~ / backups / DCIM " a la carpeta sdcard de mi dispositivo, haría esto:

 ~/adb-push ~/backups/DCIM /sdcard 

(Pero tenga en cuenta que la ubicación de la tarjeta SD no es " / sdcard " para todos los dispositivos Android, por ejemplo, podría ser " / mnt / sdcard ").

Han pasado algunos años, los problemas pueden o no haber cambiado, pero sigue siendo un PITA. Lo que está funcionando para mí en linux es crear una carpeta temporal, crear un enlace simbólico a la carpeta (s) que quiero copiar, y luego me impulso adb. Ignora el directorio principal, pero copia los subdirectorios. Actualmente, no necesito crear ningún subdirectorio, ellos se crean y copian para mí. Eso podría ser específico de la plataforma, no estoy seguro. Pero el directorio principal que estoy copiando, copia los archivos en él en lugar del directorio. Así que el directorio temporal se ignora, y las carpetas de enlaces simbólicos luego se copian.

Ejemplo:

 mkdir tmp cd tmp ln -s ../Foo . ln -s ../Bar . cd .. adb push tmp /sdcard/ 

Y empujará Foo/file1 a /sdcard/Foo/file1 . Con sólo adb push Foo/. /sdcard/ adb push Foo/. /sdcard/ entonces termino con /sdcard/file1 que no me hace feliz.

Qué tal: archivo -> empujar -> extraer

 export FOLDER="Books" TMPIFS="$IFS" IFS=$'\n' for i in `find "$FOLDER"/ -type d | sed 's,//\+,/,g'`; do adb shell mkdir -p /mnt/sdcard/"$i" done && \ adb push "$FOLDER"/ /mnt/sdcard/"$FOLDER" unset FOLDER IFS="$TMPIFS" 
  • Adb no puede conectarse a Android-x86 en VirtualBox hoy
  • El uso de ADB localmente en el dispositivo (loopback) no muestra ningún dispositivo
  • ¿Cómo puedo saber si una actividad de Android ha finalizado desde un comando externo de adb?
  • Cómo conectar mi dispositivo Android a eclipse
  • Adb - ¿Cómo reinstalar una aplicación, sin retener los datos?
  • ¿Hay alguna forma de ignorar INSTALL_FAILED_VERSION_DOWNGRADE en la instalación de la aplicación con Android Debug Bridge?
  • Actualizar Mediastore Android usando adb
  • Android Studio - Problemas con Lollipop, ADB y Genymotion: Los dispositivos no aparecerán. "El servidor adb está desactualizado. asesinato…"
  • Cómo encontrar la información de mi aplicación / datos / datos mediante el Explorador de archivos de Android Device Monitor
  • adb logcat se cuelga con el mensaje "esperando el dispositivo"
  • Cómo configurar la fecha / hora del dispositivo Android mediante programación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.