必须在用户空间用convmv对dentry名称执行编码转换:先sudo apt install convmv,再convmv -f gbk -t utf8 --notest -r预览,确认无误后去掉--notest执行真实转码,可递归或指定单目录修复。

统信UOS挂载Windows设备后,整个目录下的文件名显示为“?????”或空白,说明内核已将原始GBK/GB18030字节流错误映射为无效UTF-8字符串,此时必须在用户空间对目录项(dentry)名称执行编码转换,而非修改文件内容本身。
确认乱码根源并安装转码工具
先验证是否为典型中文文件名编码错配:打开终端,执行 ls /mnt/usb | head -3,若输出含问号或方框,且该U盘来自Windows,则大概率是GBK编码被UTF-8误解析。接着安装convmv——这是专用于修复文件名编码的命令行工具:sudo apt install convmv。该工具不改动文件内容,只重命名目录项,安全可控。
预览转换效果,避免误操作
进入挂载点所在目录,例如 cd /mnt/usb,然后运行:convmv -f gbk -t utf8 --notest -r .。这一步会逐行打印“NOTICE: cd 旧项目 → 新项目”,其中“新项目”即预期还原出的中文名。若出现乱码或明显错字,说明原始编码不是GBK,需改用 -f gb18030 或 -f cp936 重试。【务必先预览再执行,convmv真实运行后无法自动回滚】
执行真实文件名批量转码
第一步:确认预览结果中中文显示正确无歧义。
第二步:去掉 --notest 参数,执行:convmv -f gbk -t utf8 -r .。
第三步:等待命令完成,终端将显示“Ready, processed X files”字样。
第四步:刷新文件管理器或执行 ls | head -3 验证根目录下文件名是否已正常显示中文。
仅修复某一级子目录(非递归)
方法一:若只想修正 /mnt/usb/合同模板 这一层,不碰其子文件夹,直接运行:convmv -f gbk -t utf8 "/mnt/usb/合同模板"。注意路径必须完整且用英文引号包裹,否则含空格或中文的路径会报错。
方法二:若该目录名本身也是乱码(如显示为 ??????),先用 ls -i 查 inode 号,再用 find /mnt/usb -inum XXXX -exec convmv -f gbk -t utf8 {} \; 定位操作。











