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

PolyMC环境下含空格目录导致ln命令执行失败的问题求助

PolyMC存档关联脚本的空格兼容修复

问题根源

  1. 遍历逻辑缺陷:原脚本用for i in instances/*遍历目录时,bash默认会按空格拆分文件名,带空格的目录(比如1.19 Sodium)会被拆成两个独立项,导致后续路径拼接直接出错。
  2. ln命令写法错误:原脚本里ln -s saves '"'${i}/.minecraft/saves'"'的额外引号完全是画蛇添足,这些引号会被当作路径的一部分,系统自然找不到被截断的目标路径。

修复后的完整脚本

#!/bin/bash
# 用find遍历instances下的所有一级子目录,完美兼容带空格的路径
find instances -maxdepth 1 -type d ! -name "instances" | while read -r instance_dir; do
    minecraft_dir="${instance_dir}/.minecraft"
    if [[ -d "${minecraft_dir}" ]]; then
        echo "正在处理: ${minecraft_dir}"
        saves_path="${minecraft_dir}/saves"
        
        # 清理旧的saves(软链接直接删,目录则递归删除)
        if [ -h "${saves_path}" ]; then
            rm -f "${saves_path}"
        else
            rm -rf "${saves_path}"
        fi
        
        # 创建软链接:用绝对路径做源,避免相对路径失效
        ln -s "$(pwd)/saves" "${saves_path}"
    fi
done

关键改动说明

  • 遍历方式替换:改用find + while read -r组合,确保带空格的目录路径被完整读取,不会被拆分。-maxdepth 1限制只扫一级子目录,! -name "instances"排除目录本身。
  • 全程双引号包裹变量:所有路径变量都用双引号套住,彻底避免空格导致的路径拆分问题。
  • ln命令修正:软链接的源路径用$(pwd)/saves生成绝对路径,确保不管脚本在哪执行都能关联正确的存档目录;目标路径直接用变量,不需要额外加引号。
  • 可读性优化:把路径拆成独立变量,加了简单注释,后续改起来更方便。

注意事项

  • 执行脚本前,确保你当前在PolyMC的根目录(也就是saves和instances文件夹同级的位置),如果不是,把$(pwd)/saves改成saves的绝对路径就行。
  • 保险起见,先备份原有存档再运行脚本,避免误删数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:45:34