You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下执行Shell脚本创建含通配符*的目录在Windows 10中显示乱码的问题咨询

问题原因与解决办法

为什么会出现乱码?

这本质是Windows和Linux的文件名规则差异导致的,和中文字符集关系不大:

  • Windows的NTFS/VFAT文件系统把*、?、:这类字符列为非法文件名字符,根本不允许出现在文件名里
  • 但Linux的文件系统(比如ext4)对文件名的限制宽松得多,允许这些字符存在。当你在Linux下创建带*的目录(不管是双系统共享的NTFS分区,还是通过SMB共享给Windows访问),Windows读取时无法识别这些非法字符,就会自动生成8.3短文件名来替代显示——也就是你看到的_2X68P~X.A这类乱码格式,这是Windows的 fallback 机制。

怎么解决?

分两种场景处理:

1. 已经创建的乱码目录(恢复正常显示)

别在Windows下直接改这些乱码目录名,容易搞出文件损坏的问题。回到Linux系统,用批量重命名命令把*替换成Windows支持的字符,比如star或者-:

# 批量替换所有含*的目录名,把*换成star
for dir in *\**; do mv "$dir" "${dir//\*/star}"; done

执行完之后,Windows端刷新一下就能看到正常的目录名了。

2. 未来创建目录(从根源避免问题)

修改你的Shell脚本,提前把*转换成Windows合法的字符再创建目录:

#!/bin/sh
DOMAINLIST='*.io.domain.fun io.domain.fun *.*.domain.fun'
for i in $DOMAINLIST
do
  # 把*替换为star,你也可以换成其他符合需求的合法字符
  safe_dirname="${i//\*/star}"
  mkdir "$safe_dirname"
done

这样创建的目录在Linux和Windows下都能正常显示,不会再出现乱码。

额外优化(SMB共享场景)

如果是通过SMB共享让Windows访问Linux目录,还可以在Samba配置文件/etc/samba/smb.conf里添加参数,让Samba自动处理非法字符:

[your_share_name]
    # 其他已有配置...
    # 开启非法字符自动转换
    mangled names = yes

开启这个选项后,Samba会自动把Windows不允许的字符替换成合法格式,不用手动改脚本也能避免乱码。


内容的提问来源于stack exchange,提问作者bloodkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:57:51