¿Cómo extraigo todos los archivos de una carpeta presente en la tarjeta SD?

110

Tengo una carpeta en mi tarjeta SD como: /mnt/sdcard/Folder1/Folder2/Folder3/*.jpg

El nombre de Folder1 y Folder2 permanece constante y dentro de Folder2 tengo Folder3, 4, 5 y así sucesivamente. Quiero extraer todos los archivos jpeg en lugar de todos los archivos (hay más) usando adb en mi directorio actual en la computadora. .

Cada carpeta tiene un número diferente de archivos jpeg y otros archivos e intenté usar esto:

adb pull mnt/sdcard/Folder1/Folder2/Folder/*.jpg .

Pero no funcionó ... Entonces, uhmm, ¿cómo puedo extraer todos los archivos presentes en cualquier carpeta de la tarjeta SD con un solo comando (comando único porque cada carpeta tiene un número diferente de archivos)?

riteshtch
fuente
¿Estás en Linux o Windows? ¿Esto lo podemos solucionar con un simple script?
Jared Burrows
Hmm, tengo las cosas de desarrollo de Android instaladas tanto en: Win7 como en Ubuntu ... si hay una solución para ambos, entonces muy bien ...! Pero en realidad lo necesito solo para Ubuntu (instalado como una máquina virtual) .. así que uhmm sí, estoy en Ubuntu ..
riteshtch
¿Puede marcar una respuesta correcta para esta pregunta?
Jared Burrows

Respuestas:

143

Un solo archivo / carpeta usando pull:

adb pull "/sdcard/Folder1"

Salida:

adb pull "/sdcard/Folder1"
pull: building file list...
pull: /sdcard/Folder1/image1.jpg -> ./image1.jpg
pull: /sdcard/Folder1/image2.jpg -> ./image2.jpg
pull: /sdcard/Folder1/image3.jpg -> ./image3.jpg
3 files pulled. 0 files skipped.

Archivos / carpetas específicos utilizando finddesde BusyBox:

adb shell find "/sdcard/Folder1" -iname "*.jpg" | tr -d '\015' | while read line; do adb pull "$line"; done;

Aquí tienes una explicación:

adb shell find "/sdcard/Folder1" - use the find command, use the top folder
-iname "*.jpg"                   - filter the output to only *.jpg files
|                                - passes data(output) from one command to another
tr -d '\015'                     - explained here: http://stackoverflow.com/questions/9664086/bash-is-removing-commands-in-while
while read line;                 - while loop to read input of previous commands
do adb pull "$line"; done;         - pull the files into the current running directory, finish. The quotation marks around $line are required to work with filenames containing spaces.

Los scripts comenzarán en la carpeta superior y de forma recursiva irán hacia abajo y encontrarán todos los archivos "* .jpg" y los extraerán de su teléfono al directorio actual.

Jared Burrows
fuente
10
adb pull /sdcardpara tirar de todo!
Ian Vaughan
@IanVaughan, ese es un comando que uso a menudo y funciona para mí, pero desearía que hubiera una manera de sacar todo de la tarjeta SD pero excluir una de las rutas secundarias
GµårÐïåñ
Me pregunto si tiene Android tar. Una simple tarpipe sobre ADB permitiría extraer archivos y metadatos de forma muy detallada, pero con exclusiones. Si gzip / bzip2 también está allí, entonces una lona comprimida estaría disponible :)
Mark K Cowan
Para las versiones modernas de adb, puede especificar el directorio y la herramienta
extraerá
@ mark-k-cowan adb backup with shared (sdcard) tiene muchos errores.
Smeterlink
72

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)
Palani
fuente
1
Intenté esto, pero solo sacó algunos directorios. No estoy seguro de cuál era su criterio.
acjay
2
Si desea extraer una carpeta propiedad de root , inicie una adbsesión de root (usando $ adb root).
MasterAM
¡Ejecute el comando como root como dijo @MasterAM! funcionó sin problema! ¡salud!
Migisha
@acjay Se omiten las carpetas vacías. Esto también se aplica a las carpetas recursivas que finalmente están vacías. Por ejemplo /sdcard/folder1/folder2, resultará en folder1ser omitido si folder2está vacío y no hay otros archivos debajo folder1.
MDMower
40

Intente simplemente dar la ruta desde donde desea extraer los archivos. Acabo de obtener los archivos de la tarjeta sd como

adb pull sdcard/

NO des * me gusta para ampliar la búsqueda o filtrar. ex: adb pull sdcard / *. txt -> esto no es válido.

solo dale adb pull sdcard /

Ilavarasan
fuente
Esta es una solución mucho más limpia. Es semánticamente mejor y también conserva la estructura del directorio.
Mike
11
Tenga en cuenta que el final / sí importa .
adrin
No necesitaba barra diagonal con adb versión 1.0.40
Variable miserable
6

Sí, solo use la barra diagonal para extraer el directorio de forma recursiva. Me funciona con Nexus 5 y la versión actual de adb (marzo de 2014).

Publicando como invitado-invitado
fuente
No necesitaba barra diagonal con adb versión 1.0.40
Variable miserable
Necesitaba la barra inclinada en la versión 1.0.32 de Android Debug Bridge con Android Q en Google Pixel XL.
Rock Lee
2

En Android 6 con ADB versión 1.0.32, debe poner / detrás de la carpeta que desea copiar. P.ejadb pull "/sdcard/".

antimateria
fuente
No necesitaba barra diagonal con adb versión 1.0.40
Variable miserable
1

Si usa jellybean, simplemente inicie cmd, escriba adb devices para asegurarse de que sea legible, escriba adb pull sdcard / sdcard_ (la fecha o extra) <--- este archivo debe crearse en el directorio adb de antemano. ¡LUCRO!

En otras versiones escriba adb pull mnt / sdcard / sdcard_ (la fecha o extra)

Recuerda hacer un archivo o tendrás un lío o no funcionará.

Eduardo
fuente
1

Si desea extraer un directorio con acceso restringido desde un dispositivo rooteado, debe reiniciar adb como root: escriba adb rootantes de extraer. De lo contrario, obtendrá un error que diceremote object '/data/data/xxx.example.app' does not exist

naXa
fuente