如何在OS X上使用node.js检测隐藏的文件

在我周围徘徊无法发现一种方法来检测OS X中与节点(nodejs)的隐藏文件。

当然,我们可以很容易地find“.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. 

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

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

这是我得到的,检查“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); }); 

所以我的问题是,如果我正确地应用0x8000掩码ino值以得到一个适当的结果?

如何parsingino属性来获取其中包含的所有其他标志?

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

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