Finder 别名未被识别为 Mac 和 node.js 上的符号链接

Finder aliases not recognized as symlinks on a Mac with node.js

我是 运行 一个 nodewebkit 应用程序,我想在文件夹中搜索别名。

以下代码有效,但无法将文件夹别名或文件别名识别为符号链接。

我哪里错了?

    var path = '/Users/test/Desktop/testfolder';
    var fs = require('fs');
    fs.readdir(path, function(err, files) {
        if (err) return;
        files.forEach(function(f) {
            var newPath = path + '/' + f;
            console.log("looking for "+ newPath +" symlink: "+fs.lstatSync(path).isSymbolicLink());
            fs.lstat(newPath, function(err, stats){
                if(err){
                    console.log(err);
                }
                if(stats.isFile()){
                    console.log('is file mofo',f);
                }
                if(stats.isDirectory()){
                    console.log('is Directory mofo',f);
                }
                if(stats.isSymbolicLink()){
                    console.log('is symbolic link');
                }
            });
        });
    });

OS X 上的 Finder 别名 在技术上不同于 符号链接

从文件系统的角度来看,它们是常规文件,只有 Finder 本身和 OS X-specific APIs 知道处理它们 - Node.js 没有内置API 为此。

如果调用 shell - 这会很慢 - 是一个选项,您可以尝试以下操作:

function isFinderAlias(path) {
  var contentType = require('child_process')
        .execFileSync('mdls', 
          [ '-raw', '-name', 'kMDItemContentType', path ], { encoding: 'utf8' })
  return contentType === 'com.apple.alias-file'
}

对于基于 swift 的方法 解析 Finder 别名到其 目标路径 ,请参阅 .