Was ist der beste Weg, um mehrere Dateien mit zu ziehen
adb pull
Ich habe auf meinen /sdcard/
25 Dateien folgenden Namen:
gps1.trace
gps2.trace
...
gps25.trace
Platzhalter funktioniert nicht:
adb pull /sdcard/gps*.trace .
Was ist der beste Weg, um mehrere Dateien mit zu ziehen
adb pull
Ich habe auf meinen /sdcard/
25 Dateien folgenden Namen:
gps1.trace
gps2.trace
...
gps25.trace
Platzhalter funktioniert nicht:
adb pull /sdcard/gps*.trace .
DDMS
Perspektive von Eclipse ausprobiert und konnte Dateien von meiner SD-Karte mehrfach auswählen und pull
auf ihnen ausführen . Wenn Sie Eclipse nicht verwenden, ist DDMS als separates SDK-Tool verfügbar.
monitor
Befehl funktioniert super, sollte drin sein <sdkdir>/tools
!
Antworten:
Sie können xargs
und das Ergebnis des adb shell ls
Befehls verwenden, der Platzhalter akzeptiert. Auf diese Weise können Sie mehrere Dateien kopieren. Ärgerlicherweise enthält die Ausgabe des adb shell ls
Befehls Zeilenvorschub-Steuerzeichen, die Sie mit entfernen könnentr -d '\r'
.
Beispiele:
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
kann einen Verzeichnisnamen anstelle von at file erhalten und das Verzeichnis mit allen darin enthaltenen Dateien wird abgerufen.
Ziehen Sie alle Ihre GPS-Spuren in / sdcard / gpsTraces
adb pull /sdcard/gpsTraces/ .
Beispiel für adb pull
und adb push
von rekursiven Verzeichnissen:
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
<- schlägt fehl
./adb pull /sdcard/
<- funktioniert rekursiv - beachten Sie den abschließenden Schrägstrich
Getestet mit Nexus 5 und adb heruntergeladen im März 2014.
Das Analysieren der Ausgabe von 'ls' ist im Allgemeinen eine schlechte Idee. Verwenden Sie stattdessen 'find'.
adb shell 'find /sdcard/ -name "gps*.trace" -print0' | xargs -0 -n 1 adb pull
Obwohl der adb pull
Befehl den Ordnernamen für den Remote-Parameter akzeptiert, bevorzuge ich die Verwendung des tar
Befehls. Es bietet mehr Flexibilität - ermöglicht Dateinamenmuster ( Einschließen und Ausschließen ), Symlink-Steuerung und behält Dateiberechtigungen bei. Seit Android 6.0 können Sie ein eingebautes verwenden. Vorher mussten Sie Tools von Drittanbietern verwenden wie busybox
:
adb exec-out tar c sdcard/amazonmp3 > amazon.tar
Stellen Sie sicher, dass Sie die Führung /
auf Ihrem Weg weglassen .
Ich habe dies für Windows-Boxen erstellt. Es ist sehr nützlich, Dateien mit Platzhaltern zu übertragen, ohne das Dateisystem zu mounten. Sie können dieses Skript irgendwo in Ihre Pfadumgebung aufnehmen.
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
Beispiel:
adbpull /sdcard/DCIM/Camera/IMG_2016*
ADBFS ein FUSE-Dateisystem für Android Debug Bridge, wenn Sie Linux oder Mac verwenden
Directory Pull ist für neue Android-Tools verfügbar. (Ich weiß nicht, von welcher Version es hinzugefügt wurde, aber es funktioniert mit dem neuesten 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)
Aufbauend auf Davids Antwort finde ich das etwas besser:
adb shell ls /foo | tr -d '\r' | xargs -n1 adb pull
Es ist nicht nur ein Zeichen weniger zu tippen (große Sache), sondern wandelt das auch nicht -r
in ein Leerzeichen um. Dies ist ein bedeutender Unterschied, als ob Sie es versuchen würden
adb shell ls /foo/myFile* | tr '\r' ' ' | xargs -i -n1 adb pull {} someDir
Sie erhalten eine Fehlermeldung
remote object '/foo/myFile1 ' does not exist
Stattdessen können Sie dies tun, was funktionieren wird:
adb shell ls /foo/myFile* | tr -d '\r' | xargs -i -n1 adb pull {} someDir
In meinem Fall funktionieren Platzhalter. Ich habe das folgende einfache Skript verwendet, um WhatsApp-Bilder meines virtuellen Geräts auf meinen Desktop zu importieren
#! /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
In Android gibt es einige Ordner mit zugehörigen Berechtigungen! Einige Ordner gehören dem Root- oder Systembenutzer.
Ihr solltet die Berechtigungen dieser Dateien und Ordner ändern, bevor ihr "adb pull" macht.
Die folgenden Befehle könnten helfen:
adb shell
su
chmod -R 777 target_folder
exit
...
adb pull /.../target_folder/ . (current local folder)
adb
aber aus den Dokumentenpull
kann ein ganzes Verzeichnis gezogen werden ??? Wenn dies der Fall ist und dies Dateien sind, die von Ihrer eigenen App generiert wurden, schreiben Sie sie in ein Unterverzeichnis wie/sdcard/mygpsfiles
und verwenden Sie sie dannadb pull /sdcard/mygpsfiles
. Funktioniert das?