2015-08-09 40 views
2

我无法发现在OS X中使用节点(nodejs)检测隐藏文件的方法。如何在OS X上使用node.js检测隐藏文件

当然,我们可以很容易找到“.dot_hidden”文件,但在Mac上,有些文件/文件夹是“受保护的”系统文件,大多数用户不应该摆弄。在Finder GUI中,当隐藏文件被迫通过“AppleShowAllFiles”显示时,它们不可见或灰显。

我也发现到UF_HIDDEN参考:为0x8000这里:

https://developer.apple.com/library/mac/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemDetails/FileSystemDetails.html

使用节点的统计,我们可以返回信息的2个额外的比特可以为隐藏状态的线索:

mode: 33188,  // File protection. 
ino: 48064969,  // File inode number. An inode is a file 
         system data structure that stores 
         information about a file. 

我不是一个十六进制/二进制的人,但它看起来像抓住stat的“ino”属性,我们可以应用0x8000并确定该文件是否被暗示为隐藏或不隐藏。

我没有任何成功的模式上的0x8000掩码,但确实有一些ino。

下面是我得到了什么,勾选“伊诺”返回0或1726,当它是1726的文件似乎匹配在OS X中的隐藏文件

var fs = require("fs"); 

var dir = "/"; 
var list = fs.readdirSync(dir); 

list.forEach(function(f){ 

    // easy dot hidden files 
    var hidden = (f.substr(0, 1) == ".") ? true : false; 

    var ino = 0; 
    var syspath = dir + "/" + f; 
    if(! hidden){ 
     var stats = fs.statSync(syspath); 

     ino = parseInt(stats.ino & 0x8000, 8); 

     // ino yeilds 0 when hidden and 1726 when not? 

     if(ino || dotted){ 
      hidden = true; 
     } 
    } 

    console.log(syspath, hidden, ino); 

}); 

所以我的问题是,如果我为了得到正确的结果,在ino值上正确应用0x8000掩码?

如何解析ino属性获取其中包含的所有其他标志?

回答

1

索引节点号码(stats.ino)是唯一标识文件的号码;它与文件的隐藏状态无关。 (事实上​​,可以随时设置或清除文件上的隐藏标志,这不会更改inode编号。)

隐藏标志是struct stat结构中的st_flags字段的一部分。不幸的是,它看起来并不像node.js fs模块公开这个值,所以如果你需要在Mac OS X上获取这些信息,你可能需要将其发送到stat shell实用程序。(短版:stat -f%f file将打印文件的标志,用十进制表示。)

+0

好的,谢谢指点。淘汰是昂贵的:(但至少,谢谢你,我有一些有形的工作,谢谢。 – bob

相关问题