Estoy tratando de extraer imágenes de Whatsup de mi teléfono Android a través de ADB usando el siguiente script:
HOST_DIR=/myImageDirectory
DEVICE_DIR="/sdcard/WhatsApp/Media/WhatsApp\ Images"
echo started
for file in $(./adb shell ls $DEVICE_DIR)
do
file=$(echo -e $file | tr -d "\r\n"); # EOL fix
echo $file
./adb pull $DEVICE_DIR/$file $HOST_DIR/;
done
El espacio en el directorio de origen se escapa con éxito para ls pero no para pull. Es decir, obtengo la lista de archivos pero no puedo extraerlos. Aquí hay 3 líneas de la salida:
IMG-20171101-WA0003.jpg
adb: error: remote object '/sdcard/WhatsApp/Media/WhatsApp\' does not exist
adb: error: remote object 'Images/IMG-20171101-WA0003.jpg' does not exist
¿Lo que da?
Obtener comillas dobles:
for file in $(./adb shell ls \""$DEVICE_DIR"\")
^ ^
./adb pull "$DEVICE_DIR/$file" $HOST_DIR/;
^ ^
Y elimine los escapes de barra invertida:
DEVICE_DIR="/sdcard/WhatsApp/Media/WhatsApp Images"
^
La respuesta de iBug resuelve el primer problema pero crea otro. El truco es omitir las comillas alrededor del nombre del directorio y solo agregarlas alrededor de la variable del directorio, así:
HOST_DIR=/myImageDirectory
DEVICE_DIR="/sdcard/WhatsApp/Media/WhatsApp\ Images"
DEVICE_DIR_noescape=/sdcard/WhatsApp/Media/WhatsApp\ Images
echo started
for file in $(./adb shell ls $DEVICE_DIR)
do
file=$(echo -e $file | tr -d "\r\n"); # EOL fix
echo $file
./adb pull "$DEVICE_DIR_noescape/$file" $HOST_DIR/;
done
Y sí necesito limpiar el código, pero esto funciona.
para el comando ADB (no shell) antes y después de la entrada SPACE " ejemplo adb pull /sdcard/Wi-Fi" "Directo /C:/1/
archivos de resultados de la carpeta "Wi-Fi Direct" copiados a la carpeta 1 en el disco duro C
ivana
iBug
Grimorio
iBug
IFS
...Grimorio
IFS
especifica qué carácter interpreta el shell como separador. El carácter predeterminado es un espacio en blanco, lo que hace que el shell se entrecorte cuando hay espacios en blanco dentro de las rutas.IFS='\n'
le dice al shell que trate una nueva línea como el separador, de modo que uno pueda entrometerse con seguridad en el tipo de rutas mencionadas anteriormente.