Android 下,在 Termux 里用 unzip 解压一个文件,结果文件名是乱码的:
$ ls kkk/
''$'\251\242''+'$'\246''1.DOCX'
''$'\251\242''+'$'\246''2.DOCX'
用 TAB 自动补全,文件名显示是这样子的:
��+�1.DOCX
��+�2.DOCX
没有乱码的正确文件名应该是:
附件 1.DOCX
附件 2.DOCX
然后问题是,这些乱码文件我怎么删也删不掉!
第 1 种方法:
$ rm -rf kkk
rm: cannot remove 'kkk/': Directory not empty
$ cd kkk
$ rm *
rm: cannot remove ''$'\251\242''+'$'\246''1.DOCX': No such file or directory
rm: cannot remove ''$'\251\242''+'$'\246''2.DOCX': No such file or directory
第 2 种方法:
$ ls -i
18251 ''$'\251\242''+'$'\246''1.DOCX'
18376 ''$'\251\242''+'$'\246''2.DOCX'
$ find ./ -inum 18251 -delete
find: cannot delete ‘./\251\242+\2461.DOCX’: No such file or directory
$ find ./ -inum 18251 -exec rm -rf {} \;
结果文件依然存在!
第 3 种方法:
$ mv \251\242+\2461.DOCX 1.txt
mv: cannot move ''$'\251\242''+'$'\246''1.DOCX' to '1.txt': No such file or directory
我试过在 adb 下用上面几个命令删,结果依然一样。用 Android 的文件管理器也删不了,也无法重命名。
我这部手机没有 root 权限,也没有电脑,只有另一部有 root 权限的手机,我把这两部手机相连,在另一部手机自带的文件管理器里同样删不掉这些乱码文件,心想也许 root 权限就能删除,但我下载了几个 root 文件管理器,里面都看不到乱码手机的挂载点,用 Termux 在 /dev/下也找不到乱码手机的设备文件,不知道怎么挂载。难道只能恢复出厂设置了吗??
求各位大佬帮帮我!!!
乱码zip文件下载:https://ufs.me/luanma.zip
其实就是自学考试网的一个附件:https://www.eeagd.edu.cn/selfec/main/ksgg.jsp?ggxh=190
我发现在一台Android 8手机上用unzip解压该乱码文件后能正常删除。
$ ls -l /sdcard/Download/kkk/
-rw-rw---- 1 root everybody 657409 Mar 10 22:46 ''$'\251\242''+'$'\246''1.DOCX'
-rw-rw---- 1 root everybody 1197974 Mar 10 22:46 ''$'\251\242''+'$'\246''2.DOCX'
在Android 13(红米手机),Termux的home目录下用unzip解压后能正常删除,但在/sdcard/Download/下解压就会出现无法删除的情况,而用7zip解压则能正常删除。
$ ls -l /sdcard/Download/kkk/
-rw-rw---- 1 u0_a888 media_rw 657409 Feb 17 17:31 ''$'\251\242''+'$'\246''1.DOCX'
-rw-rw---- 1 u0_a888 media_rw 1197974 Feb 17 17:31 ''$'\251\242''+'$'\246''2.DOCX'
7zip解压后除了文件名是╕╜╝■1.DOCX、╕╜╝■2.DOCX外,其它信息与上面相同。如果是权限原因的话,为何7zip解压的能删除呢?
1
yuhangch 2023-03-10 13:13:16 +08:00 1
手机 terminal 能按 tab 吗?
|
2
AoEiuV020CN 2023-03-10 13:14:00 +08:00
巧了,我昨天研究 java 读写乱码文件名问题就生成了一堆乱码文件,
最后是用 find + rm 删除的,我这命令因为其他文件都是.java 结尾所以这么写,重点只有双引号, find -name "*a" -o -exec rm "{}" \; |
4
AoEiuV020CN 2023-03-10 13:15:10 +08:00
@yuhangch #1 termux 是自带 tab 按键的, 其他 terminal 如果键盘有 tab 的话也是可能能用的,我以前用百度手机输入法特殊皮肤用过,
|
5
hahastudio 2023-03-10 13:16:34 +08:00 1
|
7
Reficul 2023-03-10 13:57:01 +08:00
find xxxx -delete
|
8
icatme 2023-03-10 14:14:11 +08:00 via Android
你换个 shell 试试?
|
9
string2020 2023-03-10 14:26:35 +08:00
你发个文件测试包出来 ,我有空试试
|
10
zjsxwc 2023-03-10 14:37:49 +08:00 1
#获取文件的 index number
$ls -lhi 2808829 -rw-r--r-- 1 zjsxwc zjsxwc 5 Mar 10 14:30 test.txt #第一列 2808829 就是 index number #通过 index number 获取文件名,然后删掉这个文件 $rm `find . -inum 2808829` |
12
string2020 2023-03-10 15:00:40 +08:00
gpt 推荐的是
adb shell rm -rf "$(printf "%q" "文件名为异常编码的文件")" |
13
9r85zMBA3IhB4drs 2023-03-10 15:12:35 +08:00
现在这种问题直接问 ChatGPT 就行了啊
---------------- 你好,这是 Bing 。我可以帮你解决这个问题。😊 在 Linux 终端删除一个文件名乱码的文件,有以下几种方法¹²³⁴: - 方法一:使用 find 命令根据文件的 inode 号来删除。每个文件都有一个不变的 inode 号,可以用 ls -li 命令查看。然后用 find -inum inode 号 -delete 命令来删除对应的文件。 - 方法二:使用通配符来匹配文件名。如果文件名只有部分乱码,可以用 rm *或 rm ?等通配符来删除。注意要加上引号防止误删其他文件。 - 方法三:使用图形界面来删除。如果系统支持图形界面,可以直接用鼠标右键选择删除或者拖动到回收站。 希望这些方法对你有帮助。 源: 与必应的对话,2023/3/10(1) linux 删除乱码文件_不愿透露姓名的菜鸟的博客-CSDN 博客. https://blog.csdn.net/Homewm/article/details/105538851 访问时间 2023/3/10. (2) Linux 下删除乱码文件及文件夹方法_linux 怎么删除乱码文件夹_momoring 的博客-CSDN 博客. https://blog.csdn.net/momoringmok/article/details/105013079 访问时间 2023/3/10. (3) Linux 删除乱码文件夹_离水的鱼儿的博客-CSDN 博客. https://blog.csdn.net/xuebing1995/article/details/105579479 访问时间 2023/3/10. (4) linux 上如何删除文件名乱码的文件_linux 文件乱码_自由 de 单车的博客-CSDN 博客. https://blog.csdn.net/ljfrocky/article/details/78434218 访问时间 2023/3/10. (5) Linux 文件名乱码无法删除文件 - 腾讯云开发者社区-腾讯云. https://cloud.tencent.com/developer/article/1952977 访问时间 2023/3/10. |
14
yolee599 2023-03-10 15:24:07 +08:00
一下回答来自 chatGPT:
在 Termux 中,乱码文件名通常是由于文件名编码不兼容所导致的。您可以尝试以下方法删除这些文件: 使用通配符删除:在 Termux 中,您可以使用通配符( wildcard )来删除文件。例如,要删除所有名称为乱码的文件,可以使用以下命令: rm -rfv *乱码* 这将删除所有名称包含“乱码”的文件和目录。 使用 inode 号删除:在 Termux 中,每个文件和目录都有一个唯一的 inode 号。您可以使用以下命令查看文件的 inode 号: ls -i 然后,使用以下命令删除指定 inode 号的文件: find . -inum [inode 号] -exec rm -i {} \; 注意,这将会询问您是否确认删除文件。 在其他系统中删除:如果您有其他系统(如 Windows 或 Linux )可以访问这些文件,您可以尝试在其他系统中删除它们。在另一个系统中,文件名可能会被正确地显示,因此您可以使用通常的方式删除这些文件。 |
15
llllljjjjjkk 2023-03-10 16:30:39 +08:00 via Android
直接把父目录干掉就可以了
|
16
hxy100 2023-03-10 19:21:06 +08:00
@llllljjjjjkk 你看他的第一种方法就是直接干目录,不是干不掉不是。
|
17
hxy100 2023-03-10 19:23:05 +08:00
我也来蹲一个结果,估计手机上的 Android 环境(类 Busybox ?)和真实的 Linux 环境有区别吧,你用的这些方式在 Linux 系统上工作良好。手机上居然不行?
|
18
vvhy 2023-03-10 19:50:57 +08:00
有意思,是不是文件系统的 bug 啊。试试 MiXplorer ,三 > 添加存储器 > 文档提供程序 > 三 > Termux ,看看能不能删掉
|
19
ufs OP 楼上各位大佬的方法都试过了,没用😭
|
20
xiaowoniukai 2023-03-11 07:03:54 +08:00 via iPhone
rm -rf 😆
|
21
maokabc 2023-03-11 14:03:32 +08:00 via Android 1
是安卓 fuse 的 bug ,管你用什么(java 层调用,c 层系统调用都没有),最后都需要经过 fuse ,除非 root 后直接进 /data/media/0 下面直接删实际文件。app 自身目录没经过 fuse ,可以删除。
|