Cómo copiar archivos seleccionados de Android con adb pull

Estoy intentando utilizar el comando de extracción de adb para copiar solo ciertos archivos (jpg) a mi macbook. Intenté “adb pull sdcard / mydir / *. Jpg” pero aparentemente no interpreta comodines. ¿Cómo puedo obtener solo los archivos jpg copiados? Arreglé el teléfono si eso ayuda.

Puede mover sus archivos a otra carpeta y luego extraer toda la carpeta.

 adb shell mkdir / sdcard / tmp
 adb shell mv /sdcard/mydir/*.jpg / sdcard / tmp # mueve tus archivos jpegs al directorio temporal
 adb pull / sdcard / tmp / # extrae este directorio (asegúrate de poner '/' al final)
 adb shell mv / sdcard / tmp / * / sdcard / mydir / # muévelos de nuevo
 adb shell rmdir / sdcard / tmp # eliminar el directorio temporal

Tire de varios archivos usando regex:

Crear pullFiles.sh :

 #!/bin/bash HOST_DIR= DEVICE_DIR=/sdcard/ EXTENSION=".jpg" for file in $(adb shell ls $DEVICE_DIR | grep $EXTENSION'$') do file=$(echo -e $file | tr -d "\r\n"); # EOL fix adb pull $DEVICE_DIR/$file $HOST_DIR/$file; done 

Ejecutarlo:

Hazlo ejecutable: chmod +x pullFiles.sh

Ejecútelo: ./pullFiles.sh

Notas:

  • como está, no funcionará cuando los nombres de archivos tengan espacios
  • incluye una solución para fin de línea (EOL) en Android, que es un “\ r \ n”

En cuanto al script corto, lo siguiente se ejecuta en mi host de Linux

 #!/bin/bash HOST_DIR= DEVICE_DIR=/sdcard/ EXTENSION="\.jpg" while read MYFILE ; do adb pull "$DEVICE_DIR/$MYFILE" "$HOST_DIR/$MYFILE" done < $(adb shell ls -1 "$DEVICE_DIR" | grep "$EXTENSION") 

"ls menos uno" le permite a "ls" mostrar un archivo por línea y las comillas permiten espacios en el nombre del archivo.