2015-08-09 34 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

相關問題