问题现象描述
在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 # 设置中文编码