Node.js: как определить, находятся ли два пути на одном диске (кроссплатформенное решение)?

#javascript #node.js #path #electron #drive

Вопрос:

В моем Electron/Node.js приложение, которое мне нужно, чтобы определить, находятся ли два пути на одном диске.

В Windows я мог бы использовать path.parse(myPath).root для получения буквы диска каждого пути. Но на Mac или Linux это просто вернет»/», в соответствии с Node.js документация.

Существует ли кроссплатформенный способ узнать, находятся ли два пути на одном диске? Или в противном случае, как мне определить это на Mac? В Linux?

Комментарии:

1. Что вы имеете в виду под драйвом в среде *nix? Диски предназначены для Windows.

2. Да, конечно, не буквы дисков в не Windows. Проблема в том, что на любом данном диске не так много места, и мне нужно знать, указывают ли два пути, с которыми я имею дело, на один и тот же диск. Кстати, меня не волнует различие между виртуальными и физическими дисками.

3. Что вы имеете в виду под драйвами? Вы имеете в виду устройства или разделы? Как насчет различных протоколов, таких как SMB, SSHFS или NFS. В Linux вы можете монтировать сетевые папки или другие удаленные системы в свою файловую систему. Что делать, если я поделюсь локальной папкой в сети и смонтирую ее с помощью SMB? Являются ли эти две точки монтирования разными «дисками» или одинаковыми? У вас есть пути, которые не указывают на какое-либо физическое устройство, например /proc/12345 или /dev/null. /dev/null имеет неограниченное пространство 😉

4. А как насчет РЕЙДА? Один путь может быть общим для нескольких физических устройств. AFAIK вы можете делать подобные вещи с LVM. Понятие «диски», как вы знаете и ожидаете, в Windows, не существует в других системах.

5. Для Linux вы можете прочитать /proc/mounts список всех точек монтирования и устройств. Вы можете преобразовать пути с символическими ссылками в фактические абсолютные пути с помощью fs.realpath . Затем вы должны быть в состоянии найти соответствующий раздел для пути. /proc/partitions содержит список всех разделов и количество блоков.