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