尝试使用 adb 递归地将 android 文件拉入 windows pc 时出现特殊文件名问题

Problem with special filenames when trying to pull android files into windows pc recursively using adb

我想将 /data/data/foo 文件夹中的所有文件下载到我的 pc。我正在使用 adb 连接我的 phone。

cd /data/data/foo
ls -R
.:
    cache
    databases
    files
    lib
    shared_prefs

./cache:

./databases:
    errors.db
    errors.db-journal
    logs.db
    logs.db-journal

./files:
cache_state.info

./shared_prefs:
LANG_CODE.xml
PPP.xml
CADD
.xml

要下载我正在使用的文件:

adb pull "/data/data/foo" %USERPROFILE%/foo

这是回复:

pull: building file list...
skipping special file 'lib'
pull: /data/data/foo/files/cache_state.info -> C:\Users\root/foo/files/cache_state.info
pull: /data/data/foo/shared_prefs/CADD
.xml -> C:\Users\root/foo/shared_prefs/CADD
.xml
cannot create 'C:\Users\root\foo\shared_prefs\CADD
.xml': No such file or directory

而事实上,只有这个被复制了:

foo/files/cache_state.info
foo/shared_prefs

我做错了什么?

问题:

你做的是对的(命令是正确的),但问题来自你要完成的任务的性质。

您正在尝试将文件从 unix 设备(ext 文件系统)复制到您的 windows 电脑(使用 NTFS 文件系统)。这通常可以正常工作,但在某些情况下却不能:不同的文件系统对于哪些文件名有效有不同的规则,如果文件名在源中有效但在目标中无效,则无法复制它并保留其名称.

根据错误,我了解到您有一个名为 CADD .xml 的文件(名称中包含换行符),该文件在您的 android 设备中有效,但在尝试复制时会出错进入您的 windows 文件系统(参见 Which file systems support newlines in file names?)。

可能的解决方案:

  • 一个一个地复制文件并为导致问题的文件设置不同的目标名称(CADD\n.xml -> CADD.xml)
  • 获取一些 ext 文件系统(在您的磁盘中创建或从外部磁盘装载)并将文件复制到那里
  • 将文件复制到您的 in-windows bash shell 使用的 ext 文件系统中(参见 How to Access Your Ubuntu Bash Files in Windows