目录
目录X
Linux 中文文件名乱码修复全过程记录
一、问题背景
在 Linux 服务器上部署网站文件时,发现目录中的部分文件名出现乱码,形如:
'$'\311\347\273\341\267\376\316\361''.pdf' '$'\263''ɹ'$'\373\261\263\276\260\323\353\316\312\314\342''.docx'
这些文件实际是从 Windows 系统上传的中文文件,而 Windows 使用 GBK 编码,而服务器系统是 UTF-8 编码,导致文件名显示乱码。
二、系统环境
执行命令查看当前系统语言环境:
locale
输出:
LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" ...
说明系统使用的是 UTF-8 编码。
三、安装文件名编码转换工具 convmv
convmv 是专门用于转换文件名编码的工具。
如果系统未安装,可执行以下命令安装:
yum install convmv -y
四、首次测试转换(dry-run)
在目标目录中(例如 /data/www/webfuture/wwwroot/jxcg),执行:
cd /data/www/webfuture/wwwroot/jxcg convmv -r -f GBK -t UTF-8 .
含义说明:
-r:递归处理子目录;-f GBK:源文件名编码(原来是 GBK);-t UTF-8:目标编码;.:当前目录;不加
--notest表示测试模式(dry run,不实际修改)。
输出示例:
Starting a dry run without changes... mv "./▒ɹ▒▒▒.png" -> "./成果简介.png" mv "./▒˲▒▒▒▒▒.pdf" -> "./人才培养.pdf" ... No changes to your files done. Would have converted 52 files in 0 seconds. Use --notest to finally rename the files.
说明 convmv 成功识别出乱码文件的原始中文名称,模拟改名结果正确。
五、正式执行转换
确认测试结果无误后,执行正式转换命令:
convmv -r -f GBK -t UTF-8 --notest .
此命令将真正重命名文件,修复乱码。执行后会输出:
Starting conversion... mv "./▒ɹ▒▒▒.png" -> "./成果简介.png" mv "./▒˲▒▒▒▒▒.pdf" -> "./人才培养.pdf" ... Ready!
六、验证结果
执行:
ls
输出结果显示所有中文文件名已恢复正常:
成果简介.docx 人才培养.pdf ...