删除通过adb push推送中文目录导致的乱码文件夹
闲来无事看看片,作为一名合格(bushi)的开发者,一般电脑下载好的影片就喜欢用 adb 推到手机上再慢慢享用
概述
在互联网上下载了一部影片,这部影片带了一个中文目录,在 adb push 的时候也没有修改这个目录的名称,就直接复制到手机的 /sdcard/Download 目录了,结果回头想要看一下这部片子的时候进到 /sdcard/Download 目录下后发现该目录名称是乱码,并目录变成了一个大小为 0 的文件,这时想到了应该是 GBK 编码导致的问题,所以想删除该目录及其下的文件,首先是通过手机自带的文件管理器删除失败,再通过 termux 删除也失败,再使用 MT文件管理 删除失败,最后切换到 PC 端,使用 adb 还是无法删除,最后通过 root 权限进入 /data/media/0/Download 目录下删除成功。
目录结构
这种目录结构简直 debuff 叠满,最后会说为什么
1 | /sdcard |
解决思路
通过 adb shell 获取到该乱码目录的索引码 inode number
1 | adb shell |
进入到 root 下删除该目录及其下的文件
1 | su |
解析
为什么要拿到索引码
因为在 adb shell 的环境下很可能无法直接输入中文,而且就算你输入了中文也很可能与目标文件名编码不一致
为什么需要 root 并进入 /data/media/0 下进行删除操作
首先,乱码目录下面有文件,系统在进行删除这个目录时会先进行目录下文件的删除,这会导致找不到文件的父级目录(乱码了),如果乱码本身的只是文件,而没有任何乱码的父级目录还好,那就不需要进入到 /data/media/0 下面进行删除,这相当于 debuff 叠满了,无论移动这个乱码文件夹还是移动下面的子文件到其他地方都不行。
这个问题的根本原因其实是安卓底层 fuse(FILESYSTEM IN USERSPACE) 的 bug,不管你使用哪种方式对 /sdcard 下面的文件进行操作,最终都会进入 fuse ,所以我们需要 root 后进入到 /data/media/0 才能绕过 fuse ,从而直接删除真实文件。
- 标题: 删除通过adb push推送中文目录导致的乱码文件夹
- 作者: CListery
- 创建于 : 2025-12-04 17:58:10
- 更新于 : 2025-12-05 11:01:11
- 链接: http://clistery.github.io/2025/12/04/android/delete-gbk-code-file/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。