【问题标题】:Finder aliases not recognized as symlinks on a Mac with node.js在带有 node.js 的 Mac 上,Finder 别名无法识别为符号链接
【发布时间】:2016-01-25 00:56:39
【问题描述】:

我正在运行一个 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');
                }
            });
        });
    });

【问题讨论】:

  • 你说的是 Finder.app 别名吗?它们特定于该应用程序,并且在技术上与符号链接不同——我想你需要一个特定于 OS X 的库。
  • 是的,这就是我刚刚发现的。使用 mdfind 是一种方法,但我认为使用 swift 更聪明。谢谢
  • 如果委托给 shell 命令是一个选项 - 这显然很慢 - 它 可以检测 Finder 别名(想一想:这就是您使用mdfind);出于好奇:你会如何使用mdfind?您打算如何改用 Swift?
  • 我的应用程序由两部分组成。一篇用 swift 写,一篇用 node-webkit。我不能在 node.js 中使用 wift,但我可以触发调用并将 semothing 写入数据库。使用 URLByResolvingAliasFileAtURL:options:error:
  • mdfind 可以与 node-mdfind 一起使用,但文档非常糟糕,所以我不确定如何使用它

标签: node.js macos node-webkit finder


【解决方案1】:
OS X 上的

Finder 别名在技术上与符号链接不同。

从文件系统的角度来看,它们是常规文件,只有 Finder 本身和特定于 OS X 的 API 知道处理它们 - 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 别名到其目标路径,请参阅this answer

【讨论】:

  • 谢谢你的好答案。但我不能确定总是安装 xcode 或命令行。还是对的
  • @Silve2611:我已经用基于mdls 的函数替换了该函数,这是一个标准实用程序(无需安装) - 希望对您有所帮助。
  • 很好的解决方案!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2015-06-29
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多