Как мне adb вытащить ВСЕ файлы из папки, присутствующей на SD-карте

110

У меня на SD-карте есть папка: /mnt/sdcard/Folder1/Folder2/Folder3/*.jpg

Имя Folder1 и Folder2 остается постоянным, а внутри Folder2 у меня есть Folder3, 4, 5 и так далее. Я хочу вытащить все файлы jpeg, а не все файлы (их больше), используя adb в мой текущий каталог на компьютере. .

В каждой папке разное количество файлов jpeg и других файлов, и я попытался использовать это:

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

Но это не сработало .. Итак, ммм, как мне adb вытащить все файлы, присутствующие в любой папке SD-карты с помощью одной команды (одна команда, потому что в каждой папке разное количество файлов)

обрядность
источник
Вы в Linux или Windows? Можно ли это решить простым скриптом?
Джаред Берроуз
Хм, у меня Android Developement Stuff установлен как на Win7, так и на Ubuntu ... если есть решение для обоих, то хорошо ...! Но на самом деле он мне нужен только для Ubuntu (установлен как виртуальная машина) .. так что ммм, да, я на Ubuntu ..
riteshtch 08
отметьте, пожалуйста, правильный ответ на этот вопрос?
Джаред Берроуз

Ответы:

143

Один файл / папка с использованием pull:

adb pull "/sdcard/Folder1"

Вывод:

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.

Конкретные файлы / папки с использованием findиз BusyBox:

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

Вот объяснение:

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.

Сценарии запускаются в верхней папке и рекурсивно спускаются вниз, находят все файлы «* .jpg» и перетаскивают их с вашего телефона в текущий каталог.

Джаред Берроуз
источник
10
adb pull /sdcardтянуть все!
Ян Воан,
@IanVaughan, это команда, которую я часто использую и работает для меня, но мне бы очень хотелось, чтобы был способ снять все с SD-карты, но исключить один из дополнительных путей
GµårÐïåñ
Интересно, а в Android есть tar? Простой брезент поверх ADB позволит очень детально извлекать файлы и метаданные, но с исключениями. Если там также есть gzip / bzip2, тогда будет доступен сжатый брезент :)
Марк К. Коуэн,
Для современных версий adbвы можете просто указать каталог, и инструмент будет рекурсивно извлекать все за вас
DirkyJerky
@ mark-k-cowan резервное копирование adb с общим доступом (sdcard) - это множество ошибок.
Smeterlink
72

Извлечение каталога доступно в новых инструментах Android. (Я не знаю, из какой версии он был добавлен, но он работает с последней версией 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)
Палани
источник
1
Я пробовал это, но он вытащил только некоторые каталоги. Не уверен, каковы были его критерии.
acjay
2
Если вы хотите извлечь папку, принадлежащую пользователю root , запустите adbкорневой сеанс (используя $ adb root).
MasterAM
запустите команду как root, как сказал @MasterAM! проработала без проблем! ура!
Мигиша,
@acjay Пустые папки не указываются. Это также верно для рекурсивных папок, которые в конечном итоге пусты. Например, /sdcard/folder1/folder2будет folder1пропущено, если folder2оно пустое и в нем нет других файлов folder1.
MDMower
40

Попробуйте просто указать путь, откуда вы хотите вытащить файлы, которые я только что получил файлы с SD-карты, например

adb pull sdcard/

НЕ ставьте * лайки, чтобы расширить поиск или отфильтровать. пример: adb pull sdcard / *. txt -> это недействительно.

просто дайте adb pull sdcard /

Илаварасан
источник
Это гораздо более чистое решение. Он семантически лучше и сохраняет структуру каталогов.
Майк,
11
Обратите внимание, что трейлинг / имеет значение .
Адрин
Мне не нужна была завершающая косая черта с adb версии 1.0.40
Miserable Variable
6

Да, просто используйте косую черту в конце для рекурсивного извлечения каталога. У меня работает с Nexus 5 и текущей версией adb (март 2014 г.).

Размещение в качестве гостя-гостя
источник
Мне не нужна была завершающая косая черта с adb версии 1.0.40
Miserable Variable
Мне нужен был завершающий слэш на Android Debug Bridge версии 1.0.32 под управлением Android Q на Google Pixel XL.
Рок Ли,
2

На Android 6 с ADB версии 1.0.32 вы должны поместить / позади папки, которую вы хотите скопировать. Напримерadb pull "/sdcard/".

антивещество
источник
Мне не нужна была завершающая косая черта с adb версии 1.0.40
Miserable Variable
1

Если вы используете jellybean, просто запустите cmd, введите adb devices, чтобы убедиться, что ваш файл читается, введите adb pull sdcard / sdcard_ (дата или дополнительный) <--- этот файл необходимо заранее создать в каталоге adb. ПРИБЫЛЬ!

В других версиях введите adb pull mnt / sdcard / sdcard_ (дата или доп)

Не забудьте создать файл, иначе у вас либо будет беспорядок, либо он не будет работать.

Эдвард
источник
1

Если вы хотите вытащить каталог с ограниченным доступом с корневого устройства, вам необходимо перезапустить adb как root: введите adb rootперед извлечением. В противном случае вы получите сообщение об ошибкеremote object '/data/data/xxx.example.app' does not exist

naXa
источник