Як дозволити витягнути ВСІ файли папки, присутньої на 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 .

Але це не спрацювало. Отже, uhmm, як я можу adb витягнути всі файли, присутні в будь-якій папці SD-картки однією командою (одна команда, оскільки кожна папка має різну кількість файлів)


Ви в Linux чи Windows? Це ми можемо вирішити простим сценарієм?
— Джаред Берроуз

Хм, у мене встановлено Android Developerment Stuff як на Win7, так і на Ubuntu .. якщо є рішення і для того, і для хорошого ..! Але насправді мені це потрібно лише для Ubuntu (встановленого як VM) .. так що, так, їм на Ubuntu ..
— riteshtch

чи можете ви позначити правильну відповідь на це запитання?
— Джаред Берроуз

Відповіді:


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тягнути всіх!
— Ian Vaughan

@IanVaughan - це команда, якою я часто користуюся, і працює для мене, але я хочу, щоб був спосіб витягнути все з SD-картки, але виключити один із
— піддоріжок

Цікаво, чи має Android tar? Простий похід над ADB дозволив би дуже дрібно витягувати файли, метадані, але з виключеннями. Якщо gzip / bzip2 також там, тоді стиснене брезент буде доступне :)
— Mark K Cowan

Для сучасних версій 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

Будь ласка, спробуйте просто вказати шлях, звідки ви хочете витягнути файли, у яких я щойно отримав файли з sdcard

adb pull sdcard/

НЕ дайте * like, щоб розширити пошук або відфільтрувати. Наприклад: adb pull sdcard / *. txt -> це недійсно.

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


Це набагато чистіше рішення. Це семантично краще і також зберігає структуру каталогів.
— Майк

11
Зауважте, що трейлінг / робить матер.
— adrin

Мені не знадобився косою косою рисою версії adb 1.0.40
— Жалюгідна змінна

6

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


Мені не знадобився косою косою рисою версії adb 1.0.40
— Жалюгідна змінна

Мені знадобився кінець косою рисою версії 1.0 Debg Bridge Android 1.0.32 під керуванням Android Q на Google Pixel XL.
— Рок Лі

2

На Android 6 з ADB версією 1.0.32 вам потрібно помістити / за папку, яку ви хочете скопіювати. Напрadb pull "/sdcard/".


Мені не знадобився косою косою рисою версії adb 1.0.40
— Жалюгідна змінна

1

якщо ви використовуєте jellybean лише запускати cmd, введіть adb-пристрої, щоб переконатися в читанні, введіть 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.