android系统/sdcard/目录下有个文件名有特殊字符,无法删除怎么办
-rw-rw—- 1 root sdcard_rw 11111 2022-11-13 21:56 window_dump.xml
-rw-rw—- 1 root sdcard_rw 512332 2022-04-06 10:29 股票基金词\345
就是这个股票基金的文件,文件管理器无法删除,终端无法复制粘贴中文
你这个情况是典型的 文件名包含非法/非 UTF-8 编码字节 导致的“幽灵文件”问题,尤其 \345
(0xE5)是个不完整的 UTF-8 字节,普通 rm
会因为路径解析失败而删不掉。
下面给你几种可靠的解决方法:
1️⃣ 用 inode 号删除(推荐,无需复制中文名)
adb shell
cd /sdcard
ls -i
输出示例:
123456 股票基金词\345
这里的 123456
就是 inode 号。
然后:
find . -inum 123456 -exec rm -i {} \;
或者直接:
find . -inum 123456 -delete
? 原理:不走文件名解析,而是直接按 inode 删除。
2️⃣ 用通配符匹配非打印字符
adb shell
cd /sdcard
rm -i 股票基金词*
如果目录下文件不多,直接用 *
抓到它。
⚠ 注意确认只匹配到目标文件。
3️⃣ 用 ls -b
+ ANSI-C 引用删除
查看转义序列:
ls -b
可能会显示:
股票基金词\345
删除时用:
rm "股票基金词$(echo -e '\345')"
这样可以精准构造原始字节。
4️⃣ 用 inode + busybox(如果系统支持)
adb shell
busybox find . -inum 123456 -delete
busybox
在有些设备里自带,比原生 find
容错更好。
5️⃣ 如果 /sdcard
是 FUSE 映射,且普通 shell 无法删
- 可能需要 root 才能删除,因为
/sdcard
映射在/storage/emulated/0
,而有些奇怪文件只有 root 权限能删:
adb root
adb shell
rm -i /storage/emulated/0/<那文件>
? 建议流程
- 先 inode 确认(方法1)
- 如果删除失败 → 确认
/sdcard
实际挂载点(mount | grep sdcard
) - 必要时切换到真实路径
/mnt/user/0/primary/
或/data/media/0/
删除
我可以帮你写一个 一键 adb 命令,自动找出 /sdcard
里含非法字节的文件并删除,这样你不用手动输入中文,也不用担心路径编码问题。
你要我帮你写吗?这样直接运行就能删掉。
我要评论