adb pull multiple files
./adb pull /sdcard
<-- fails
./adb pull /sdcard/
<-- works recursively - note the trailing slash
Tested with Nexus 5 and adb downloaded March 2014.
You can use xargs
and the result of the adb shell ls
command which accepts wildcards. This allows you to copy multiple files. Annoyingly the output of the adb shell ls
command includes line-feed control characters that you can remove using tr -d '\r'
.
Examples:
# Using a relative path
adb shell 'ls sdcard/gps*.trace' | tr -d '\r' | xargs -n1 adb pull
# Using an absolute path
adb shell 'ls /sdcard/*.txt' | tr -d '\r' | sed -e 's/^\///' | xargs -n1 adb pull
Parsing the output from 'ls' is generally a bad idea. Instead, use 'find'.
adb shell 'find /sdcard/ -name "gps*.trace" -print0' | xargs -0 -n 1 adb pull
Why you shouldn't parse the output of ls
adb pull
can receive a directory name instead of at file and it will pull the directory with all files in it.
Pull all your gps traces in /sdcard/gpsTraces
adb pull /sdcard/gpsTraces/ .
Example of adb pull
and adb push
of recursive directories:
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)