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

Node.js如何跨平台判断两个路径是否位于同一磁盘

Node.js判断两个路径是否属于同磁盘的实现方案

跨平台通用方案

无需区分操作系统,直接通过Node.js内置fs模块的设备ID属性判断即可,全平台兼容:

  • 实现逻辑:同一个磁盘/挂载分区下的所有文件、目录,调用fs.stat()返回的Stats对象中dev(设备ID)属性值完全一致,只需对比两个路径的dev值是否相等即可完成判断。

代码示例:

// 异步实现
const fs = require('fs/promises');
async function isSameDisk(path1, path2) {
  try {
    const [stat1, stat2] = await Promise.all([
      fs.stat(path1),
      fs.stat(path2)
    ]);
    return stat1.dev === stat2.dev;
  } catch (err) {
    // 路径不存在或无权限访问时的异常处理
    throw err;
  }
}

// 同步实现
const fsSync = require('fs');
function isSameDiskSync(path1, path2) {
  try {
    const stat1 = fsSync.statSync(path1);
    const stat2 = fsSync.statSync(path2);
    return stat1.dev === stat2.dev;
  } catch (err) {
    throw err;
  }
}

注意:

  1. 如果需要跟随软链接指向的真实路径判断磁盘归属,使用fs.stat();如果需要判断软链接本身所在的磁盘,替换为fs.lstat()即可。
  2. 该方案兼容所有Node.js支持的操作系统,包括Windows、macOS、Linux,不需要额外做系统适配。

分系统独立实现(可选)

如果需要手动按系统逻辑实现,可以参考以下方案:

Windows系统

通过path.parse()获取路径根目录匹配盘符即可:

const path = require('path');
function isSameDiskWin(path1, path2) {
  return path.parse(path1).root.toLowerCase() === path.parse(path2).root.toLowerCase();
}

macOS/Linux系统

通过系统df命令获取路径对应的挂载点,对比挂载点是否一致即可:

const { execSync } = require('child_process');
function getMountPointUnix(targetPath) {
  return execSync(`df "${targetPath.replace(/"/g, '\\"')}" | awk 'NR==2 {print $6}'`, {
    encoding: 'utf8'
  }).trim();
}

function isSameDiskUnix(path1, path2) {
  return getMountPointUnix(path1) === getMountPointUnix(path2);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:51:03