Come faccio a estrarre adb TUTTI i file di una cartella presente nella scheda SD


110

Ho una cartella nella mia scheda SD come: /mnt/sdcard/Folder1/Folder2/Folder3/*.jpg

Il nome di Folder1 e Folder2 rimane costante e all'interno di Folder2 ho Folder3, 4, 5 e così via .. Voglio estrarre tutti i file jpeg piuttosto che tutti i file (ce ne sono di più) usando adb nella mia directory corrente sul computer. .

Ogni cartella ha un numero diverso di file jpeg e altri file e ho provato a usarlo:

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

Ma non ha funzionato .. Quindi uhmm come faccio adb ad estrarre tutti i file presenti in qualsiasi cartella della scheda SD con un singolo comando (comando singolo perché ogni cartella ha un numero diverso di file)


Sei in Linux o Windows? Questo possiamo risolverlo con un semplice script?
— Jared Burrows

Hmm, ho installato Android Development Stuff su entrambi: Win7 e Ubuntu .. se c'è una soluzione per entrambi allora bene e bene ..! Ma in realtà ne ho bisogno solo per Ubuntu (installato come VM) .. quindi uhmm sì sono su Ubuntu ..
— riteshtch

puoi contrassegnare una risposta corretta per questa domanda?
— Jared Burrows

Risposte:


143

File singolo / cartella utilizzando pull:

adb pull "/sdcard/Folder1"

Produzione:

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.

File / cartelle specifici utilizzando findda BusyBox:

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

Ecco una spiegazione:

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.

Gli script inizieranno nella cartella superiore e ricorsivamente scenderanno e troveranno tutti i file "* .jpg" e li trascineranno dal telefono alla directory corrente.


10
adb pull /sdcardtirare tutto!
— Ian Vaughan

@IanVaughan questo è un comando che uso spesso e funziona per me, ma vorrei che ci fosse un modo per estrarre tutto dalla scheda SD ma escludere uno dei percorsi secondari
— GµårÐïåñ

Mi chiedo se Android ha tar? Un semplice tarpipe su ADB consentirebbe l'estrazione molto fine di file, metadati, ma con esclusioni. Se gzip / bzip2 è presente anche lì, allora sarà disponibile un tarpipe compresso :)
— Mark K Cowan

Per le versioni moderne di adbpuoi semplicemente specificare la directory e lo strumento
— estrarrà

@ mark-k-cowan adb backup with shared (sdcard) è pieno di bug.
— Smeterlink

72

Il pull della directory è disponibile sui nuovi strumenti Android. (Non so da quale versione sia stata aggiunta, ma funziona sull'ultimo 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
Ho provato questo, ma ha estratto solo alcune directory. Non sono sicuro di quali fossero i suoi criteri.
— acjay

2
Se vuoi estrarre una cartella di proprietà di root , avvia una adbsessione di root (usando $ adb root).
— MasterAM

esegui il comando come root proprio come ha detto @MasterAM! ha funzionato senza problemi! Saluti!
— Migisha

@acjay Le cartelle vuote vengono omesse. Questo vale anche per le cartelle ricorsive che alla fine sono vuote. Ad esempio, /sdcard/folder1/folder2verrà folder1omesso se folder2è vuoto e non ci sono altri file sotto folder1.
— MDMower

40

Per favore prova a dare il percorso da dove vuoi estrarre i file. Ho appena ricevuto i file da sdcard come

adb pull sdcard/

NON dare * mi piace per ampliare la ricerca o per filtrare. ex: adb pull sdcard / *. txt -> questo non è valido.

basta dare adb pull sdcard /


Questa è una soluzione molto più pulita. È semanticamente migliore e preserva anche la struttura delle directory.
— Mike,

11
Si noti che il finale / fa mater.
— adrin

Non avevo bisogno della barra finale con la versione 1.0.40 di adb
— Miserable Variable

6

Sì, usa la barra finale per estrarre ricorsivamente la directory. Per me funziona con Nexus 5 e la versione corrente di adb (marzo 2014).


Non avevo bisogno della barra finale con la versione 1.0.40 di adb
— Miserable Variable

Avevo bisogno della barra finale su Android Debug Bridge versione 1.0.32 con Android Q su Google Pixel XL.
— Rock Lee il

2

Su Android 6 con ADB versione 1.0.32, devi mettere / dietro la cartella che vuoi copiare. Per esempioadb pull "/sdcard/".


Non avevo bisogno della barra finale con la versione 1.0.40 di adb
— Miserable Variable

1

se stai usando jellybean avvia cmd, digita adb devices per assicurarti che sia leggibile, digita adb pull sdcard / sdcard_ (la data o extra) <--- questo file deve essere creato in anticipo nella directory adb. PROFITTO!

In altre versioni digita adb pull mnt / sdcard / sdcard_ (la data o extra)

Ricordati di creare un file o avrai un pasticcio o non funzionerà.


1

Se vuoi estrarre una directory con accesso limitato da un dispositivo rooted devi riavviare adb come root: digita adb rootprima di pull. Altrimenti riceverai un errore che diceremote object '/data/data/xxx.example.app' does not exist

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.