Je ne l'utilise pas adbmais à partir des documents pullpeut ê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/mygpsfilespuis utiliser adb pull /sdcard/mygpsfiles. Cela fonctionnerait-il?
Squonk
2
Alternativement, je viens d'essayer l'explorateur de fichiers dans la DDMSperspective de l'éclipse et j'ai pu sélectionner plusieurs fichiers à partir de ma carte SD et effectuer un pullsur eux. Si vous n'utilisez pas eclipse, DDMS est disponible en tant qu'outil SDK distinct.
Squonk
monitorla commande fonctionne très bien, devrait être dedans <sdkdir>/tools!
Santosh Kumar
Réponses:
141
Vous pouvez utiliser xargset le résultat de la adb shell lscommande qui accepte les caractères génériques. Cela vous permet de copier plusieurs fichiers. Malheureusement, la sortie de la adb shell lscommande comprend des caractères de contrôle de saut de ligne que vous pouvez supprimer à l'aide de tr -d '\r'.
FYI: Windows et DOS utilisent "\ r \ n" pour les paires retour chariot / saut de ligne (c'est-à-dire pas "\ n \ r").
BrainSlugs83
3
dans mon cas, il a échoué en essayant d'extraire les noms de fichiers (correctement obtenus) du répertoire racine de l'android, pour le résoudre, j'ai utilisé:adb shell "ls -d /mnt/sdcard/Pictures/Screenshots/*" | tr '\r' ' ' | xargs -n1 adb pull
rupps
4
Cela ne fonctionne pas en disant que tr n'est pas reconnu comme une commande interne ou externe
Suncatcher
101
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 pullet adb pushde répertoires récursifs:
@kakyo Cela fonctionne pour les sous-dossiers pour moi. vérifiez que vous avez la dernière ADB de google. (J'utilise la version 1.0.29)
Ofir Luzon
Oui, j'ai trouvé que cela fonctionne pour les dossiers non vides à la fin. J'avais des dossiers vides qui n'ont pas été extraits. Aussi, semble-t-il que "push" est non récursif?
kakyo
@kakyo J'ai ajouté la sortie d'un pull et push récursif à ma réponse. Vous avez raison sur les dossiers vides, ils ne sont pas tirés ou poussés.
Ofir Luzon
1
Attention: avec ADB pull, les fichiers perdent leur date de modification d'origine.
Stan le
3
@Stan: sauf si vous utilisez l'option "-a" comme dans "adb pull [-a] <remote> ... <local>", qui selon l'aide préserve l'horodatage et le mode du fichier.
Rusty Gear
27
./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.
Sur ma machine, j'avais besoin d'utiliser le chemin complet vers adb, mais sinon, cela fonctionnait très bien!
Dan J
Cette réponse est en fait assez intelligente. Bon travail!
Darth Egregious
6
Même si la adb pullcommande a commencé à accepter le nom de dossier pour le paramètre distant, je préfère toujours utiliser la tarcommande. 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:
Oh, ça n'a pas marché. tar -tvf me dit que le résultat ne ressemble pas à une archive tar. Tant pis.
themuddler
Voie très forte! Mais le problème est que des erreurs / avertissements tels que "tar: suppression de '/' en tête des noms de membres" sont ajoutés au fichier de sortie. Je ne sais pas comment éliminer cela.
x'ES
Je reçois un fichier de 1,5 Ko sur la sortie.
Shayan le
5
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.
gotoend
)
for /F "tokens=* USEBACKQ" %%F in (`adb shell ls %1`) do (
settext=%%F
set mfile=!text:~0,-1!
adb pull "!mfile!"
)
:end
endlocal
Malheureusement, j'utilise Windows avec Cygwin. Mais je dois me souvenir de celui-ci - solution très intéressante!
hsz
3
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)
En plus d'être un caractère de moins à taper (gros problème), il ne convertit pas le -ren un espace. C'est une différence significative, comme si vous essayez de faire
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
Vous utilisez des caractères génériques pour cp sur Android et non pour tirer sur l'hôte, c'est pourquoi cela fonctionne. Belle alternative, bien que la copie vers / sdcard / coûte de la mémoire supplémentaire et fuit des fichiers privés vers sdcard.
user905686
0
PowerShell:
adb shell ls /sdcard/gps*.trace | foreach {adb pull $_}
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?DDMS
perspective de l'éclipse et j'ai pu sélectionner plusieurs fichiers à partir de ma carte SD et effectuer unpull
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 laadb shell ls
commande qui accepte les caractères génériques. Cela vous permet de copier plusieurs fichiers. Malheureusement, la sortie de laadb shell ls
commande comprend des caractères de contrôle de saut de ligne que vous pouvez supprimer à l'aide detr -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
la source
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
etadb 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)
la source
./adb pull /sdcard
<- échoue./adb pull /sdcard/
<- fonctionne récursivement - notez la barre oblique de finTesté avec Nexus 5 et adb téléchargé en mars 2014.
la source
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
Pourquoi vous ne devriez pas analyser la sortie de ls
la source
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 latar
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 quebusybox
:adb exec-out tar c sdcard/amazonmp3 > amazon.tar
Assurez-vous d'omettre le début
/
de votre chemin.la source
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*
la source
ADBFS un système de fichiers FUSE pour Android Debug Bridge si vous utilisez Linux ou Mac
la source
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)
la source
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 faireadb 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
la source
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
la source
PowerShell:
adb shell ls /sdcard/gps*.trace | foreach {adb pull $_}
la source
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)
la source