有没有一种方法可以确定节点中符号链接的目标路径?

时间:2019-02-08 23:03:02

标签: node.js symlink fs symlink-traversal

情况

我只是遇到了一种不应该经常发生的奇怪情况,但是我想防止它再次发生。

我有一段代码创建了一个深层潜水目录列表,其中包含源文件夹及其所有子文件夹中的所有文件。

总体而言,直到今天,这从来都不是问题。

我有一个同僚开发人员,它不小心将子文件夹的符号链接设置为指向父文件夹。这导致我的深潜重新吸收,直到坠毁。

例如:

topfolder
topfolder/sub1 - real folder
topfolder/sub2 - symlink back to topfolder

我的代码可以毫无问题地读取topfolder中的所有文件,然后读取topfolder/sub1中的所有文件。然后,由于topfolder/sub2指向topfolder,所以我读取了topfolder/sub2中的所有文件,这些文件与topfolder中相同,然后依次是topfolder/sub2/sub1和{{ 1}}到topfolder/sub2/sub2

我的问题

在node.js中是否可以确定符号链接的目标?我想知道是否可以创建一个我已经阅读过的文件夹列表,并且在进入上面的符号链接时,我确定目的地确实是我已经阅读过的文件夹,然后我就跳过了该文件夹。

预先感谢...

1 个答案:

答案 0 :(得分:1)

  

node.js中是否可以确定符号链接的目的地?

是的。 fs.readlink(dir)将返回符号链接的目的地(如果为1),否则返回错误。

fs.readlink("sub2", function(err, destination){
  if(err)
    //sub2 is not a symlink, proceed to go into it
  else if(destination)
    //sub2 is a symlink, check if 'destination' is a folder we have already been through
});