Comment puis-je extraire tous les fichiers d'un dossier présent sur la carte SD

110

J'ai un dossier sur ma carte SD comme: /mnt/sdcard/Folder1/Folder2/Folder3/*.jpg

Le nom de Folder1 et Folder2 reste constant et à l'intérieur de Folder2, j'ai Folder3, 4, 5 et ainsi de suite .. Je veux extraire tous les fichiers jpeg plutôt que tous les fichiers (il y en a plus) en utilisant adb dans mon répertoire actuel sur l'ordinateur. .

Chaque dossier a un nombre différent de fichiers jpeg et d'autres fichiers et j'ai essayé d'utiliser ceci:

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

Mais cela n'a pas fonctionné. Alors euhmm comment puis-je extraire tous les fichiers présents dans n'importe quel dossier de la carte SD avec une seule commande (commande unique car chaque dossier a un nombre de fichiers différent)

riteshtch
la source
Êtes-vous sous Linux ou Windows? Cela peut-il être résolu avec un simple script?
Jared Burrows
Hmm, j'ai les trucs de développement Android installés sur les deux: Win7 ainsi que Ubuntu .. s'il y a une solution pour les deux alors bien et bien ..! Mais en réalité, je n'en ai besoin que pour Ubuntu (installé en tant que VM) .. donc euhmm ouais je suis sur Ubuntu ..
riteshtch
pouvez-vous s'il vous plaît marquer une réponse correcte pour cette question?
Jared Burrows

Réponses:

143

Fichier / dossier unique utilisant pull:

adb pull "/sdcard/Folder1"

Production:

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.

Fichiers / dossiers spécifiques utilisant findde BusyBox:

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

Voici une explication:

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.

Les scripts commenceront dans le dossier supérieur et descendront récursivement et trouveront tous les fichiers "* .jpg" et les extrairont de votre téléphone vers le répertoire courant.

Jared Burrows
la source
10
adb pull /sdcardpour tout tirer!
Ian Vaughan
@IanVaughan, c'est une commande que j'utilise souvent et qui fonctionne pour moi, mais j'aimerais qu'il y ait un moyen de tout retirer de la carte SD mais d'exclure l'un des sous-chemins
GµårÐïåñ
Je me demande si Android a tar? Une simple bâche sur ADB permettrait une extraction très fine des fichiers, des métadonnées, mais avec des exclusions. Si gzip / bzip2 est également là, alors une bâche compressée serait disponible :)
Mark K Cowan
Pour les versions modernes de adbvous pouvez simplement spécifier le répertoire et l'outil tirera tout récursivement pour vous
DirkyJerky
@ mark-k-cowan adb backup avec shared (sdcard) est plein de bugs.
Smeterlink
72

L'extraction de répertoire est disponible sur les nouveaux outils Android. (Je ne sais pas à partir de quelle version il a été ajouté, mais il fonctionne sur le dernier 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)
Palani
la source
1
J'ai essayé cela, mais cela n'a extrait que quelques répertoires. Je ne sais pas quels étaient ses critères.
acjay
2
Si vous souhaitez extraire un dossier appartenant à root , démarrez une adbsession root (en utilisant $ adb root).
MasterAM
exécutez la commande en tant que root comme l'a dit @MasterAM! a fonctionné sans problème! à votre santé!
Migisha
@acjay Les dossiers vides sont omis. Cela est également vrai pour les dossiers récursifs qui sont finalement vides. Par exemple, il /sdcard/folder1/folder2sera folder1omis si folder2est vide et qu'il n'y a pas d'autres fichiers sous folder1.
MDMower
40

Veuillez essayer en donnant simplement le chemin d'où vous voulez extraire les fichiers Je viens de recevoir les fichiers de sdcard comme

adb pull sdcard/

NE PAS donner * comme pour élargir la recherche ou pour filtrer. ex: adb pull sdcard / *. txt -> ceci n'est pas valide.

il suffit de donner adb pull sdcard /

Ilavarasan
la source
C'est une solution beaucoup plus propre. Il est sémantiquement meilleur et préserve également la structure des répertoires.
Mike
11
Notez que la fin / est importante .
adrin
Je n'avais pas besoin de barre oblique finale avec adb version 1.0.40
Variable misérable
6

Oui, utilisez simplement la barre oblique de fin pour extraire récursivement le répertoire. Fonctionne pour moi avec Nexus 5 et la version actuelle d'adb (mars 2014).

Publier en tant qu'invité
la source
Je n'ai pas besoin de barre oblique finale avec la version adb 1.0.40
Variable misérable
J'avais besoin de la barre oblique finale sur Android Debug Bridge version 1.0.32 exécutant Android Q sur Google Pixel XL.
Rock Lee le
2

Sur Android 6 avec ADB version 1.0.32, vous devez mettre / derrière le dossier que vous souhaitez copier. Par exempleadb pull "/sdcard/".

antimatière
la source
Je n'ai pas besoin de barre oblique finale avec la version adb 1.0.40
Variable misérable
1

si vous utilisez jellybean, lancez simplement cmd, tapez adb devices pour vous assurer que votre lecture est lisible, tapez adb pull sdcard / sdcard_ (la date ou un supplément) <--- ce fichier doit être créé au préalable dans le répertoire adb. PROFIT!

Dans les autres versions, tapez adb pull mnt / sdcard / sdcard_ (la date ou un supplément)

N'oubliez pas de créer un fichier ou vous allez avoir un désordre ou cela ne fonctionnera pas.

EDward
la source
1

Si vous souhaitez extraire un répertoire avec un accès restreint à partir d'un périphérique enraciné, vous devez redémarrer adb en tant que root: tapez adb rootavant de tirer. Sinon, vous obtiendrez une erreur disantremote object '/data/data/xxx.example.app' does not exist

naXa
la source