检测 Node.js 中的硬链接
Detecting Hard Links in Node.js
如何判断文件系统路径是否是 link 和 Node.js 的硬路径?函数 fs.lstat
给出一个 stats
对象,当给定一个 hard link 时, return 分别对 stats.isDirectory()
和 stats.isFile()
为真。 fs.lstat
没有提供任何东西来说明普通 file
或 directory
与 linked 之间的区别。
如果我对 linking (ln
) 工作原理的理解是正确的,那么 linked 文件指向磁盘上与原始文件相同的位置。这意味着原始文件和 linked 版本是相同的,并且无法区分原始文件和 linked 之间的区别。
我正在寻找的功能如下:
This is hypothetical pseudo-code for demonstration & communication purposes.
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
抱歉,这是不可能的,您不能区分原始文件和硬链接文件。它们在您的 linux 系统上是相同的,并且指向相同的 inode。
好吧..只是为了好玩...
您可以选择通过特定目录中的 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。如果没有,您可以假设没有 link(在当前目录中)。
但是,我们似乎无法通过 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
如何判断文件系统路径是否是 link 和 Node.js 的硬路径?函数 fs.lstat
给出一个 stats
对象,当给定一个 hard link 时, return 分别对 stats.isDirectory()
和 stats.isFile()
为真。 fs.lstat
没有提供任何东西来说明普通 file
或 directory
与 linked 之间的区别。
如果我对 linking (ln
) 工作原理的理解是正确的,那么 linked 文件指向磁盘上与原始文件相同的位置。这意味着原始文件和 linked 版本是相同的,并且无法区分原始文件和 linked 之间的区别。
我正在寻找的功能如下:
This is hypothetical pseudo-code for demonstration & communication purposes.
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
抱歉,这是不可能的,您不能区分原始文件和硬链接文件。它们在您的 linux 系统上是相同的,并且指向相同的 inode。
好吧..只是为了好玩... 您可以选择通过特定目录中的 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。如果没有,您可以假设没有 link(在当前目录中)。
但是,我们似乎无法通过 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