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 .
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
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)
./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*
ADBFS un système de fichiers Fuse pour Android Debug Bridge si vous utilisez Linux ou mac
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.
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)
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
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
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