web-dev-qa-db-fra.com

adb tirer plusieurs fichiers

Quelle est la meilleure façon d'extraire plusieurs fichiers en utilisant

adb pull

J'ai sur mon /sdcard/ 25 fichiers avec le nom suivant:

gps1.trace
gps2.trace
...
gps25.trace

Wildcard ne fonctionne pas:

adb pull /sdcard/gps*.trace .
77
hsz

Vous pouvez utiliser xargs et le résultat de la commande adb Shell ls qui accepte les caractères génériques. Cela vous permet de copier plusieurs fichiers. Malheureusement, le résultat de la commande adb Shell ls inclut 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
125
David Momenso

adb pull peut recevoir un nom de répertoire au lieu de at file et le répertoire contenant tous les fichiers y sera extrait. 

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)
86
Ofir Luzon

./adb pull /sdcard <- échoue

./adb pull /sdcard/ <- fonctionne de manière récursive - notez la barre oblique finale

Testé avec Nexus 5 et adb téléchargé en mars 2014.

J'ai créé cela pour les boîtes Windows. Il est très utile de transférer des fichiers à l'aide de 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*

5
cardeol
4
qdiesel

Même si la commande adb pull a commencé à accepter le nom du dossier pour le paramètre distant, je préfère tout de même utiliser la commande tar. Il offre plus de flexibilité - permet des modèles de nom de fichier ( include et exclude ), un contrôle de lien symbolique, conserve les autorisations de fichier. Depuis Android 6.0, vous pouvez utiliser une fonction intégrée. 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 / qui précède dans votre chemin.

4
themuddler

Le répertoire pull 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)
3
Palani

Analyser la sortie de 'ls' est généralement une mauvaise idée. Au lieu de cela, utilisez 'find'.

adb Shell 'find /sdcard/ -name "gps*.trace" -print0' | xargs -0 -n 1 adb pull

Pourquoi vous ne devriez pas analyser la sortie de ls

2
ishmael

s'appuyant sur la réponse de David, je trouve que cela est légèrement meilleur:

adb Shell ls /foo | tr -d '\r' | xargs -n1 adb pull

En plus du fait qu'il ne faut qu'un caractère à taper (gros problème), il ne convertit pas le -r en un espace. C'est une différence significative, comme si vous essayiez de le faire

adb Shell ls /foo/myFile* | tr '\r' ' ' | xargs -i -n1 adb pull {} someDir

vous aurez 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 
1
FuriousGeorge

Les jokers fonctionnent dans mon cas, j’utilise le script suivant pour importer les images Whatsapp de mon périphérique 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
0
srinivasu u