Linux/Windows双系统下NTFS分区创建含管道符(|)文件名的解决方案


阅读 3 次

问题现象描述

在Ubuntu 22.04系统中,尝试在挂载的NTFS分区(如/dev/nvme1n1p2)创建包含管道符"|"的文件名时遇到错误:

touch: setting times of '|': No such file or directory

而在ext4分区和/media目录下则可以正常创建。通过findmnt命令可见问题分区挂载类型为fuseblk(NTFS):

/dev/nvme1n1p2 on /media/xname/ddisk type fuseblk (rw,nosuid,nodev...)

根本原因分析

这是由于NTFS文件系统对特殊字符的限制导致的,具体涉及:

  • 文件系统差异:NTFS默认禁止使用管道符等特殊字符
  • 挂载参数限制:Windows兼容性导致的默认配置
  • 双系统共享分区:需要同时满足Linux和Windows的命名规范

解决方案

方法1:修改挂载参数(推荐)

编辑/etc/fstab文件,为NTFS分区添加windows_names禁用选项:

sudo nano /etc/fstab
# 修改对应行示例:
/dev/nvme1n1p2 /media/xname/ddisk ntfs-3g defaults,windows_names=0 0 0

然后重新挂载:

sudo umount /dev/nvme1n1p2
sudo mount -a

方法2:使用Unicode转义

当必须保留Windows兼容性时,可使用Unicode表示:

touch $'\u007C'  # |的Unicode编码
ls -l | grep $'\u007C'

方法3:创建硬链接

在ext4分区创建文件后建立硬链接:

ln /path/to/original_file /media/xname/ddisk/$'\u007C'

验证与测试

测试创建包含多个特殊字符的文件:

# 创建测试文件
touch $'\u007C\u0021\u0040'

# 验证文件属性
stat $'\u007C\u0021\u0040' | grep -E "File|Size"

# 跨系统测试
cp $'\u007C\u0021\u0040' /mnt/windows_share/

注意事项

  • 修改挂载参数后建议在Windows下运行chkdsk
  • 共享分区建议建立专门的特殊字符文件目录
  • 对于开发环境,建议统一使用ASCII字符命名

扩展知识

NTFS-3g支持的完整字符限制参数:

windows_names    # 禁用Windows保留字符
allow_other      # 允许其他用户访问
locale=zh_CN.UTF-8  # 设置中文编码