Как скопировать выбранные файлы с Android с помощью adb pull

Я пытаюсь использовать команду adb pull для копирования только определенных файлов (jpg) в мой macbook. Я пробовал "adb pull sdcard/mydir/*. Jpg", но он явно не интерпретирует подстановочные знаки. Как я могу скопировать только файлы jpg? Я рутировал телефон, если это поможет.

3 ответа

Решение

Вы можете переместить ваши файлы в другую папку, а затем вытащить всю папку.

оболочка adb mkdir /sdcard/tmp
Оболочка adb mv /sdcard/mydir/*.jpg /sdcard/tmp # переместить ваши jpegs во временную директорию
adb pull /sdcard/tmp/ # pull этого каталога (обязательно ставьте '/' в конце)
Оболочка adb mv /sdcard/tmp/* /sdcard/mydir/ # переместить их обратно
Оболочка adb rmdir /sdcard/tmp # удалить временный каталог

Вытащите несколько файлов с помощью регулярных выражений:

Создайте pullFiles.sh:

#!/bin/bash
HOST_DIR=<pull-to>
DEVICE_DIR=/sdcard/<pull-from>
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

Запустить его:

Сделайте его исполняемым: chmod +x pullFiles.sh

Запустить его: ./pullFiles.sh

Заметки:

  • как есть, не будет работать, если в именах файлов есть пробелы
  • включает в себя исправление для конца строки (EOL) на Android, которое является "\r\n"

Что касается короткого сценария, на моем хосте Linux работает следующее

#!/bin/bash
HOST_DIR=<pull-to>
DEVICE_DIR=/sdcard/<pull-from>
EXTENSION="\.jpg"

while read MYFILE ; do
    adb pull "$DEVICE_DIR/$MYFILE" "$HOST_DIR/$MYFILE"
done < $(adb shell ls -1 "$DEVICE_DIR" | grep "$EXTENSION")

"ls минус один" позволяет "ls" показывать по одному файлу на строку, а кавычки допускают пробелы в имени файла.

Другие вопросы по тегам