检测Node.js中的硬链接

时间:2015-08-05 04:08:20

标签: javascript node.js filesystems hardlink

如何判断文件系统路径是否是与Node.js的硬链接?函数fs.lstat提供了一个stats对象,当给定一个硬链接时,它将分别对stats.isDirectory()stats.isFile()返回true。 fs.lstat并未提供任何注意正常filedirectory与正常链接之间差异的内容。

如果我对链接(ln)如何工作的理解是正确的,那么链接文件指向磁盘上与原始文件相同的位置。这意味着原始版本和链接版本都是相同的,并且无法区分原始文件和链接的文件。

我正在寻找的功能如下:

  

这是用于演示的假设伪代码&沟通目的。

fs.writeFileSync('./file.txt', 'hello world')
fs.linkSync('./file.txt', './link.txt')
fs.isLinkSync('./file.txt') // => false
fs.isLinkSync('./link.txt') // => true
fs.linkChildrenSync('./file.txt') // => ['./link.txt']
fs.linkChildrenSync('./link.txt') // => []
fs.linkParentSync('./link.txt') // => './file.txt'
fs.linkParentSync('./file.txt') // => null

2 个答案:

答案 0 :(得分:3)

好吧..只是为了好玩...... 您可以选择通过某个目录中的inode查找文件。

从stat对象中获取inode ID后。

fs.stat('./okay.file', function(err, stats){
  var inodeID = stats.ino; // Double check that this is correct
});

然后,您可以迭代文件夹中的所有文件,如果inode ID匹配,则使用条件检查。 Get all files in a directory。如果没有,您可以假设没有链接(IN当前目录)。

然而,看起来我们不能通过inode id搜索文件。见:nodejs open nfs files by inode (or a the fastest way to reopen a file)

fs.lstat:https://nodejs.org/api/fs.html#fs_fs_lstat_path_callback

统计对象:https://nodejs.org/api/fs.html#fs_class_fs_stats

答案 1 :(得分:0)

很抱歉,但是您无法区分原始链接文件和硬链接文件。它们在你的linux系统上是相同的,并指向同一个inode。