Есть ли способ определить путь назначения символической ссылки в узле? - PullRequest
0 голосов
/ 09 февраля 2019

Ситуация

Я просто наткнулся на странную ситуацию, которая не должна случаться часто, но я бы хотел предотвратить ее повторение.

У меня есть кусок кода, который создаеткаталог глубоких погружений всех файлов в исходной папке и всех ее дочерних папках.

В общем, это никогда не было проблемой, до сегодняшнего дня.

У меня был один случайный разработчик, который случайноустановите символическую ссылку на вложенную папку, чтобы она указывала на родительскую папку.Это заставило мое глубокое погружение откатываться до тех пор, пока оно не рухнуло.

Например:

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

Мой код читает все файлы в topfolder, а затем все файлы в topfolder/sub1 без проблем,Затем, поскольку topfolder/sub2 указывает на topfolder, я прочитал все файлы в topfolder/sub2, которые такие же, как в topfolder, а затем topfolder/sub2/sub1, затем topfolder/sub2/sub2 и далее в topfolder/sub2/sub2/sub2 и т. Д.

Мой вопрос

Есть ли способ в node.js определить назначение символической ссылки?Я полагаю, что если мне удастся создать список папок, которые я прочитал, и при запуске по символической ссылке выше я определю, что местом назначения действительно является папка, которую я уже прочитал, тогда я просто пропускаю эту папку.

Спасибо зазаранее ...

1 Ответ

0 голосов
/ 09 февраля 2019

Есть ли способ в node.js определить назначение символической ссылки?

Да.fs.readlink(dir) вернет пункт назначения символической ссылки, если он один, в противном случае будет ошибка.

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
});
...