Wie kann ich ALLE Dateien eines Ordners auf der SD-Karte ziehen?


110

Ich habe einen Ordner auf meiner SD-Karte als: /mnt/sdcard/Folder1/Folder2/Folder3/*.jpg

Der Name von Ordner1 und Ordner2 bleibt konstant und in Ordner2 habe ich Ordner3, 4, 5 usw. Ich möchte alle JPEG-Dateien und nicht alle Dateien (es gibt mehr) mit adb in mein aktuelles Verzeichnis auf dem Computer ziehen. .

Jeder Ordner hat eine andere Anzahl von JPEG-Dateien und anderen Dateien, und ich habe versucht, Folgendes zu verwenden:

adb pull mnt/sdcard/Folder1/Folder2/Folder/*.jpg .

Aber es hat nicht funktioniert. Also ähm, wie kann ich alle Dateien, die in einem Ordner der SD-Karte vorhanden sind, mit einem einzigen Befehl abrufen (einzelner Befehl, da jeder Ordner eine andere Anzahl von Dateien hat)?


Sind Sie in Linux oder Windows? Dies können wir mit einem einfachen Skript lösen?
Jared Burrows

Hmm, ich habe das Android Developement Stuff auf beiden installiert: Win7 und Ubuntu. Wenn es eine Lösung für beide gibt, dann gut und gut. Aber in Wirklichkeit brauche ich es nur für Ubuntu (als VM installiert). Also ähm, ja, ich bin auf Ubuntu.
Riteshtch

Können Sie bitte eine richtige Antwort auf diese Frage markieren?
Jared Burrows

Antworten:


143

Einzelne Datei / Ordner mit pull:

adb pull "/sdcard/Folder1"

Ausgabe:

adb pull "/sdcard/Folder1"
pull: building file list...
pull: /sdcard/Folder1/image1.jpg -> ./image1.jpg
pull: /sdcard/Folder1/image2.jpg -> ./image2.jpg
pull: /sdcard/Folder1/image3.jpg -> ./image3.jpg
3 files pulled. 0 files skipped.

Bestimmte Dateien / Ordner mit findaus BusyBox:

adb shell find "/sdcard/Folder1" -iname "*.jpg" | tr -d '\015' | while read line; do adb pull "$line"; done;

Hier ist eine Erklärung:

adb shell find "/sdcard/Folder1" - use the find command, use the top folder
-iname "*.jpg"                   - filter the output to only *.jpg files
|                                - passes data(output) from one command to another
tr -d '\015'                     - explained here: http://stackoverflow.com/questions/9664086/bash-is-removing-commands-in-while
while read line;                 - while loop to read input of previous commands
do adb pull "$line"; done;         - pull the files into the current running directory, finish. The quotation marks around $line are required to work with filenames containing spaces.

Die Skripte beginnen im obersten Ordner und gehen rekursiv nach unten, suchen alle "* .jpg" -Dateien und ziehen sie von Ihrem Telefon in das aktuelle Verzeichnis.


10
adb pull /sdcardalles ziehen!
Ian Vaughan

@ IanVaughan, das ist ein Befehl, den ich oft benutze und der für mich funktioniert, aber ich wünschte, es gäbe eine Möglichkeit, alles von der SD-Karte abzuziehen, aber einen der Unterpfade auszuschließen
GµårÐïåñ

Ich frage mich, ob Android hat tar? Eine einfache Plane über ADB würde ein sehr feinkörniges Abrufen von Dateien und Metadaten ermöglichen, jedoch mit Ausschlüssen. Wenn gzip / bzip2 auch dort ist, dann wäre eine komprimierte Plane verfügbar :)
Mark K Cowan

Für moderne Versionen von können adbSie einfach das Verzeichnis angeben und das Tool wird rekursiv alles für Sie ziehen
DirkyJerky

@ mark-k-cowan adb Backup mit Shared (SD-Karte) ist viele Fehler.
Smeterlink

72

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)

1
Ich habe es versucht, aber es wurden nur einige Verzeichnisse abgerufen. Ich bin mir nicht sicher, was seine Kriterien waren.
Acjay

2
Wenn Sie einen Ordner von root abrufen möchten , starten Sie eine adbRoot-Sitzung (mit $ adb root).
MasterAM

Führen Sie den Befehl als root aus, genau wie @MasterAM gesagt hat! funktionierte ohne problem! Prost!
Migisha

@acjay Leere Ordner werden weggelassen. Dies gilt auch für rekursive Ordner, die letztendlich leer sind. ZB /sdcard/folder1/folder2wird folder1weggelassen, wenn folder2es leer ist und keine anderen Dateien darunter sind folder1.
MDMower

40

Bitte versuchen Sie, nur den Pfad anzugeben, von dem Sie die Dateien abrufen möchten. Ich habe gerade die Dateien von der SD-Karte erhalten

adb pull sdcard/

Geben Sie NICHT * gerne, um die Suche zu erweitern oder herauszufiltern. Beispiel: adb pull sdcard / *. txt -> dies ist ungültig.

gib einfach adb pull sdcard /


Dies ist eine viel sauberere Lösung. Es ist semantisch besser und behält auch die Verzeichnisstruktur bei.
Mike

11
Beachten Sie, dass das Trailing eine Rolle / spielt .
Adrin

Ich brauchte keinen abschließenden Schrägstrich mit adb Version 1.0.40
Miserable Variable

6

Ja, verwenden Sie einfach den abschließenden Schrägstrich, um das Verzeichnis rekursiv abzurufen. Funktioniert für mich mit Nexus 5 und der aktuellen Version von adb (März 2014).


Ich brauchte keinen abschließenden Schrägstrich mit ADB Version 1.0.40
Miserable Variable

Ich brauchte den abschließenden Schrägstrich auf Android Debug Bridge Version 1.0.32 mit Android Q auf Google Pixel XL.
Rock Lee

2

Unter Android 6 mit ADB Version 1.0.32 müssen Sie / hinter den Ordner legen, den Sie kopieren möchten. Z.Badb pull "/sdcard/".


Ich brauchte keinen abschließenden Schrägstrich mit ADB Version 1.0.40
Miserable Variable

1

Wenn Sie Jellybean verwenden, starten Sie einfach cmd. Geben Sie adb Geräte ein, um sicherzustellen, dass Sie lesbar sind. Geben Sie adb pull sdcard / sdcard_ (Datum oder Extra) ein. <--- Diese Datei muss zuvor im adb-Verzeichnis erstellt werden. PROFITIEREN!

In anderen Versionen geben Sie adb pull mnt / sdcard / sdcard_ ein (Datum oder Extra)

Denken Sie daran, eine Datei zu erstellen, oder Sie werden entweder ein Durcheinander haben oder es wird nicht funktionieren.


1

Wenn Sie ein Verzeichnis mit eingeschränktem Zugriff von einem gerooteten Gerät abrufen möchten, müssen Sie adb als root: type adb rootvor dem Abrufen neu starten . Andernfalls wird eine Fehlermeldung angezeigtremote object '/data/data/xxx.example.app' does not exist

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.