V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ufs
V2EX  ›  Android

求救!如何删除这个乱码文件?

  •  
  •   ufs · 2023-03-10 13:08:24 +08:00 · 10243 次点击
    这是一个创建于 627 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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/下也找不到乱码手机的设备文件,不知道怎么挂载。难道只能恢复出厂设置了吗??

    求各位大佬帮帮我!!!

    第 1 条附言  ·  2023-03-11 00:27:48 +08:00

    乱码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解压的能删除呢?

    21 条回复    2023-03-11 14:03:32 +08:00
    yuhangch
        1
    yuhangch  
       2023-03-10 13:13:16 +08:00   ❤️ 1
    手机 terminal 能按 tab 吗?
    AoEiuV020CN
        2
    AoEiuV020CN  
       2023-03-10 13:14:00 +08:00
    巧了,我昨天研究 java 读写乱码文件名问题就生成了一堆乱码文件,
    最后是用 find + rm 删除的,我这命令因为其他文件都是.java 结尾所以这么写,重点只有双引号,
    find -name "*a" -o -exec rm "{}" \;
    ufs
        3
    ufs  
    OP
       2023-03-10 13:14:19 +08:00 via Android
    @yuhangch 可以的
    AoEiuV020CN
        4
    AoEiuV020CN  
       2023-03-10 13:15:10 +08:00
    @yuhangch #1 termux 是自带 tab 按键的, 其他 terminal 如果键盘有 tab 的话也是可能能用的,我以前用百度手机输入法特殊皮肤用过,
    3dwelcome
        6
    3dwelcome  
       2023-03-10 13:22:14 +08:00   ❤️ 1
    握一把手

    /t/841866
    Reficul
        7
    Reficul  
       2023-03-10 13:57:01 +08:00
    find xxxx -delete
    icatme
        8
    icatme  
       2023-03-10 14:14:11 +08:00 via Android
    你换个 shell 试试?
    string2020
        9
    string2020  
       2023-03-10 14:26:35 +08:00
    你发个文件测试包出来 ,我有空试试
    zjsxwc
        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`
    icatme
        11
    icatme  
       2023-03-10 14:57:21 +08:00
    @zjsxwc 你看一眼他的第二种方法
    string2020
        12
    string2020  
       2023-03-10 15:00:40 +08:00
    gpt 推荐的是
    adb shell rm -rf "$(printf "%q" "文件名为异常编码的文件")"
    9r85zMBA3IhB4drs
        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.
    yolee599
        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 )可以访问这些文件,您可以尝试在其他系统中删除它们。在另一个系统中,文件名可能会被正确地显示,因此您可以使用通常的方式删除这些文件。
    llllljjjjjkk
        15
    llllljjjjjkk  
       2023-03-10 16:30:39 +08:00 via Android
    直接把父目录干掉就可以了
    hxy100
        16
    hxy100  
       2023-03-10 19:21:06 +08:00
    @llllljjjjjkk 你看他的第一种方法就是直接干目录,不是干不掉不是。
    hxy100
        17
    hxy100  
       2023-03-10 19:23:05 +08:00
    我也来蹲一个结果,估计手机上的 Android 环境(类 Busybox ?)和真实的 Linux 环境有区别吧,你用的这些方式在 Linux 系统上工作良好。手机上居然不行?
    vvhy
        18
    vvhy  
       2023-03-10 19:50:57 +08:00
    有意思,是不是文件系统的 bug 啊。试试 MiXplorer ,三 > 添加存储器 > 文档提供程序 > 三 > Termux ,看看能不能删掉
    ufs
        19
    ufs  
    OP
       2023-03-11 00:34:21 +08:00 via Android
    楼上各位大佬的方法都试过了,没用😭
    xiaowoniukai
        20
    xiaowoniukai  
       2023-03-11 07:03:54 +08:00 via iPhone
    rm -rf 😆
    maokabc
        21
    maokabc  
       2023-03-11 14:03:32 +08:00 via Android   ❤️ 1
    是安卓 fuse 的 bug ,管你用什么(java 层调用,c 层系统调用都没有),最后都需要经过 fuse ,除非 root 后直接进 /data/media/0 下面直接删实际文件。app 自身目录没经过 fuse ,可以删除。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6036 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:19 · PVG 10:19 · LAX 18:19 · JFK 21:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.