如何在 OS X 上使用 node.js 检测隐藏文件
How to detect hidden files with node.js on OS X
四处寻找,我无法找到一种方法来检测 OS X 中带有节点 (nodejs) 的隐藏文件。
当然,我们很容易找到“.dot_hidden”文件,但是在Mac上,有files/folders是"protected"个系统文件,那大多数用户不应该 fiddle。在 Finder GUI 中,当通过 "AppleShowAllFiles".
强制显示隐藏文件时,它们是不可见的或变灰的
我确实在此处发现了对 UF_HIDDEN 的引用:0x8000:
使用节点的统计数据,我们可以 return 2 个额外的信息位,可以为隐藏状态提供线索:
mode: 33188, // File protection.
ino: 48064969, // File inode number. An inode is a file
system data structure that stores
information about a file.
我不是一个真正的十六进制/二进制人,但它看起来像获取统计数据的 "ino" 属性 我们可以应用 0x8000 并确定文件是否被提示为隐藏。
我在模式上使用 0x8000 掩码没有取得任何成功,但在 ino 上确实取得了一些成功。
这是我得到的,检查 "ino" returns 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 属性 获取其中包含的所有其他标志?
inode号(stats.ino
)是唯一标识一个文件的编号;它与文件的隐藏状态无关。 (实际上,可以随时设置或清除文件上的隐藏标志,这不会更改索引节点号。)
隐藏标志是 struct stat
结构中 st_flags
字段的一部分。不幸的是,它看起来不像 node.js fs
模块暴露了这个值,所以如果你需要 shell 到 stat
shell 实用程序需要在 Mac OS X 上获取此信息。(简短版本:stat -f%f file
将打印文件的标志,以十进制表示。)
四处寻找,我无法找到一种方法来检测 OS X 中带有节点 (nodejs) 的隐藏文件。
当然,我们很容易找到“.dot_hidden”文件,但是在Mac上,有files/folders是"protected"个系统文件,那大多数用户不应该 fiddle。在 Finder GUI 中,当通过 "AppleShowAllFiles".
强制显示隐藏文件时,它们是不可见的或变灰的我确实在此处发现了对 UF_HIDDEN 的引用:0x8000:
使用节点的统计数据,我们可以 return 2 个额外的信息位,可以为隐藏状态提供线索:
mode: 33188, // File protection.
ino: 48064969, // File inode number. An inode is a file
system data structure that stores
information about a file.
我不是一个真正的十六进制/二进制人,但它看起来像获取统计数据的 "ino" 属性 我们可以应用 0x8000 并确定文件是否被提示为隐藏。
我在模式上使用 0x8000 掩码没有取得任何成功,但在 ino 上确实取得了一些成功。
这是我得到的,检查 "ino" returns 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 属性 获取其中包含的所有其他标志?
inode号(stats.ino
)是唯一标识一个文件的编号;它与文件的隐藏状态无关。 (实际上,可以随时设置或清除文件上的隐藏标志,这不会更改索引节点号。)
隐藏标志是 struct stat
结构中 st_flags
字段的一部分。不幸的是,它看起来不像 node.js fs
模块暴露了这个值,所以如果你需要 shell 到 stat
shell 实用程序需要在 Mac OS X 上获取此信息。(简短版本:stat -f%f file
将打印文件的标志,以十进制表示。)