Quelle est la meilleure façon d'extraire plusieurs fichiers en utilisant
adb pull
J'ai sur mes /sdcard/
25 fichiers avec le nom suivant:
gps1.trace
gps2.trace
...
gps25.trace
Wildcard ne fonctionne pas:
adb pull /sdcard/gps*.trace .
Quelle est la meilleure façon d'extraire plusieurs fichiers en utilisant
adb pull
J'ai sur mes /sdcard/
25 fichiers avec le nom suivant:
gps1.trace
gps2.trace
...
gps25.trace
Wildcard ne fonctionne pas:
adb pull /sdcard/gps*.trace .
DDMS
perspective de l'éclipse et j'ai pu sélectionner plusieurs fichiers à partir de ma carte SD et effectuer un pull
sur eux. Si vous n'utilisez pas eclipse, DDMS est disponible en tant qu'outil SDK distinct.
monitor
la commande fonctionne très bien, devrait être dedans <sdkdir>/tools
!
Réponses:
Vous pouvez utiliser xargs
et le résultat de la adb shell ls
commande qui accepte les caractères génériques. Cela vous permet de copier plusieurs fichiers. Malheureusement, la sortie de la adb shell ls
commande comprend des caractères de contrôle de saut de ligne que vous pouvez supprimer à l'aide de tr -d '\r'
.
Exemples:
adb shell 'ls sdcard/gps*.trace' | tr -d '\r' | xargs -n1 adb pull
adb shell 'ls /sdcard/*.txt' | tr -d '\r' | sed -e 's/^\///' | xargs -n1 adb pull
adb shell "ls -d /mnt/sdcard/Pictures/Screenshots/*" | tr '\r' ' ' | xargs -n1 adb pull
adb pull
peut recevoir un nom de répertoire au lieu de at file et il extraira le répertoire contenant tous les fichiers.
Tirez toutes vos traces gps dans / sdcard / gpsTraces
adb pull /sdcard/gpsTraces/ .
Exemple de adb pull
et adb push
de répertoires récursifs:
C:\Test>adb pull /data/misc/test/ .
pull: building file list...
pull: /data/misc/test/test1/test2/test.3 -> ./test1/test2/test.3
pull: /data/misc/test/test1/test2/test.2 -> ./test1/test2/test.2
pull: /data/misc/test/test1/test2/test.1 -> ./test1/test2/test.1
pull: /data/misc/test/test1/test.3 -> ./test1/test.3
pull: /data/misc/test/test1/test.2 -> ./test1/test.2
pull: /data/misc/test/test1/test.1 -> ./test1/test.1
pull: /data/misc/test/test.3 -> ./test.3
pull: /data/misc/test/test.2 -> ./test.2
pull: /data/misc/test/test.1 -> ./test.1
9 files pulled. 0 files skipped.
0 KB/s (45 bytes in 0.093s)
C:\Test>adb push . /data/misc/test/
push: ./test1/test2/test.3 -> /data/misc/test/test1/test2/test.3
push: ./test1/test2/test.2 -> /data/misc/test/test1/test2/test.2
push: ./test1/test2/test.1 -> /data/misc/test/test1/test2/test.1
push: ./test1/test.3 -> /data/misc/test/test1/test.3
push: ./test1/test.2 -> /data/misc/test/test1/test.2
push: ./test1/test.1 -> /data/misc/test/test1/test.1
push: ./test.3 -> /data/misc/test/test.3
push: ./test.2 -> /data/misc/test/test.2
push: ./test.1 -> /data/misc/test/test.1
9 files pushed. 0 files skipped.
0 KB/s (45 bytes in 0.062s)
./adb pull /sdcard
<- échoue
./adb pull /sdcard/
<- fonctionne récursivement - notez la barre oblique de fin
Testé avec Nexus 5 et adb téléchargé en mars 2014.
L'analyse de la sortie de «ls» est généralement une mauvaise idée. Au lieu de cela, utilisez «trouver».
adb shell 'find /sdcard/ -name "gps*.trace" -print0' | xargs -0 -n 1 adb pull
Même si la adb pull
commande a commencé à accepter le nom de dossier pour le paramètre distant, je préfère toujours utiliser la tar
commande. Il offre plus de flexibilité - permet des modèles de nom de fichier (à la fois inclure et exclure ), contrôle des liens symboliques, préserve les autorisations de fichier. Depuis Android 6.0, vous pouvez utiliser un fichier. Avant cela, vous deviez utiliser des outils tiers tels que busybox
:
adb exec-out tar c sdcard/amazonmp3 > amazon.tar
Assurez-vous d'omettre le début /
de votre chemin.
J'ai créé ceci pour les boîtes Windows, il est très utile de transférer des fichiers en utilisant des caractères génériques sans monter le système de fichiers. Vous pouvez inclure ce script quelque part dans votre chemin env.
adbpull.bat
@echo off
setlocal enabledelayedexpansion
if %1.==. (
echo Wilcard parameter is required.
goto end
)
for /F "tokens=* USEBACKQ" %%F in (`adb shell ls %1`) do (
set text=%%F
set mfile=!text:~0,-1!
adb pull "!mfile!"
)
:end
endlocal
Exemple:
adbpull /sdcard/DCIM/Camera/IMG_2016*
ADBFS un système de fichiers FUSE pour Android Debug Bridge si vous utilisez Linux ou Mac
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)
en s'appuyant sur la réponse de David, je trouve que c'est légèrement mieux:
adb shell ls /foo | tr -d '\r' | xargs -n1 adb pull
En plus d'être un caractère de moins à taper (gros problème), il ne convertit pas le -r
en un espace. C'est une différence significative, comme si vous essayez de faire
adb shell ls /foo/myFile* | tr '\r' ' ' | xargs -i -n1 adb pull {} someDir
vous obtiendrez une erreur en disant
remote object '/foo/myFile1 ' does not exist
Au lieu de cela, vous pouvez le faire, ce qui fonctionnera:
adb shell ls /foo/myFile* | tr -d '\r' | xargs -i -n1 adb pull {} someDir
Les caractères génériques fonctionnent dans mon cas, j'ai utilisé le script simple suivant pour importer des images Whatsapp de mon appareil virtuel sur mon bureau
#! /bin/bash
mkdir -p ~/Pictures/Pictures_adb
rm -f ~/Pictures/Pictures_adb/*
cd ~/Pictures/Pictures_adb
adb root
adb shell 'cp /data/media/0/WhatsApp/Media/WhatsApp\ Profile\ Photos/* /sdcard/Pictures/;exit'
adb pull /sdcard/Pictures
mv ~/Pictures/Pictures_adb/Pictures/* ~/Pictures/Pictures_adb/
rmdir ~/Pictures/Pictures_adb/Pictures
cd
Sous Android, il existe un dossier avec des autorisations associées! Certains dossiers appartiennent à un utilisateur root ou système.
Vous devriez changer les permissions de ces fichiers, dossiers avant de faire "adb pull".
Les commandes suivantes peuvent aider:
adb shell
su
chmod -R 777 target_folder
exit
...
adb pull /.../target_folder/ . (current local folder)
adb
mais à partir des documentspull
peut être utilisé pour extraire un répertoire entier ??? Si tel est le cas et que ce sont des fichiers générés par votre propre application, pourquoi ne pas les écrire dans un sous-répertoire tel que/sdcard/mygpsfiles
puis utiliseradb pull /sdcard/mygpsfiles
. Cela fonctionnerait-il?