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.