如何读取 Node.js 中的符号链接

How to read a symlink in Node.js

我想读一个 symlink,并获取 link 本身的详细信息,不是 link 的内容编辑文件。我如何在 Node 中以跨平台的方式做到这一点?

我可以使用 lstat 轻松检测到 symlinks,没问题。一旦我知道文件的路径,并且它是一个 symlink,我该如何读取它? fs.readFile 始终读取目标文件,或将 links 的目录读取到目录时抛出错误。

有一个fs.constants.O_SYMLINK常数,理论上在OSX上解决了这个问题,但在Ubuntu和Windows上似乎都没有定义10.

如果您确定该文件是一个符号链接,试试这个:

fs.readlink("./mysimlink", function (err, linkString) { 
         // .. do some error handling here .. 
         console.log(linkString) 
});

已确认正在处理 Linux。

然后您可以使用 fs.realpath() 将其变成完整路径。请注意,尽管 linkString 可以只是文件名或相对路径以及完全限定路径,因此您可能必须为符号链接获取 fs.realpath(),确定其目录部分并将其前缀为 linkString 在使用 fs.realpath() 之前。

我刚刚遇到了同样的问题:有时 fs.readlink returns 是相对路径,有时 returns 是绝对路径。 (为了简单起见,未实施正确的错误处理)

const fs = require('fs');
const pathPckg = require('path');

async function getTarLinkOfSymLink(path){
    return new Promise((resolve, reject)=>{
        fs.readlink(path, (err, tarPath)=>{
            if(err){
                console.log(err.message);
                return resolve('');
            }
            const baseSrcPath = pathPckg.dirname(path);
            return resolve( pathPckg.resolve(baseSrcPath, tarPath) );
        });
    });
}

// usage:
const path = '/example/symbolic/link/path';
const tarPath = await getTarLinkOfSymLink(path);

如果符号 link 是文件或 directory/folder,则代码有效 - 在 Linux

上测试