我一直在尝试使用类似的东西将文件从我的Android设备移动到我的osx机器:adb shell tar -c directory_to_copy | tar -x.似乎远程tar正在工作,但文件被破坏的方式.经过一番游戏,我发现:
似乎adb shell命令将LF转换为CRLF:
% adb shell 'cd /mnt/sdcard;echo hi>a.bin'
% adb shell 'cd /mnt/sdcard;cat a.bin' | hexdump -C
00000000 68 69 0d 0a |hi..|
00000004
% adb pull /mnt/sdcard/a.bin
0 KB/s (3 bytes in 0.457s)
% hexdump -C a.bin
00000000 68 69 0a |hi.|
00000003
Run Code Online (Sandbox Code Playgroud)它看起来是服务器或守护进程导致的而不是客户端(请参阅len = 4):
% ADB_TRACE=1 adb shell 'cd /mnt/sdcard;cat a.bin'
[... snip ...]
system/core/adb/commandline.c::read_and_dump():read_and_dump(): post adb_read(fd=3): len=4
[... snip ...]
Run Code Online (Sandbox Code Playgroud)我猜这个守护进程在windows用户的shell命令中进行了那种翻译.
我的问题是:
谢谢!
Gle*_*len 17
Adb没有故意这样做,但是当你给它一个运行命令时,它不够聪明,不能分配一个终端; android端的终端是烹饪字节的东西.代替
adb shell 'cd /mnt/sdcard;cat a.bin' | hexdump -C
Run Code Online (Sandbox Code Playgroud)
试着做
adb shell 'stty raw; cd /mnt/sdcard;cat a.bin' | hexdump -C
Run Code Online (Sandbox Code Playgroud)
这指示终端设备根本不破坏字节,而是传递它们.
Fab*_*ndl 12
用adb exec-out <command>而不是adb shell.
例 adb exec-out cat /data/myfile.txt > localfile.txt
第一个答案中提到的"stty"技巧一般不起作用.
要将输出管道连接到主机端的hexdump命令,可能没问题.但是,对于tar(如原始问题的主题中所述)以及许多其他可以接受二进制流输入的命令,这不起作用.正如Fabian Zeindl正确指出的那样,使用'adb exec-out ......'是正确的方法.
在ADB上传输tar输出的一些示例:
这里假设在Android的路径中找到了tar可执行文件:
adb exec-out 'cd /sdcard; tar -cf - DCIM/' > DCIM.taradb exec-out 'cd /sdcard; tar -cf - DCIM/' | tar -tvf -一些涉及压缩和使用busybox的更复杂的例子:
adb exec-out 'cd /sdcard; /system/xbin/extras/busybox tar -czf - DCIM/' > DCIM.tgzadb exec-out 'cd /sdcard; GZIP="-9" /system/xbin/extras/busybox tar -czf - DCIM/' | tar -tvzf -adb exec-out 'cd /sdcard; BGZIP2="-9" /system/xbin/extras/busybox tar -cjf - DCIM/' > DCIM.tar.bz2| 归档时间: |
|
| 查看次数: |
7627 次 |
| 最近记录: |