Скрипт Node.js для вывода списка всех USB-накопителей

Я хотел бы написать скрипт node.js.

Он отобразит сообщение на консоли, скажем:

USB CONNECTED: usb-name, usb-manufacturer-name

ex:

$ node.js listubs.js
USB CONNECTED: New Volume, ADATA

До сих пор единственное место, которое помогает мне определить, что подключенное USB-устройство является USB-накопителем, — это командная строка Linux «usb-devices». Но я не могу знать понятное имя USB-накопителя.

Как узнать понятное имя?

Я читал про usb-detection, usb npm module, но не могу найти в них то, что мне нужно. Я также хотел бы, чтобы скрипт мог монтировать и размонтировать usb-хранилище.


person Ahmed Shendy    schedule 22.09.2015    source источник
comment
Вы можете использовать пакет usb-detection, который дает вам события при подключении, изменении или удалении нового USB: npmjs.com/package/usb-обнаружение   -  person mcanet    schedule 08.12.2015
comment
Спасибо, я сделал это, используя понимание Linux.   -  person Ahmed Shendy    schedule 10.12.2015


Ответы (1)


Вам может быть полезен список дисков. Это модуль для перечисления всех подключенных дисков на вашем компьютере, как съемных, так и нет (помеченных логическим свойством system). Это пример вывода из системы Linux:

[
    {
        device: '/dev/sda',
        description: 'WDC WD10JPVX-75J',
        size: '931.5G',
        mountpoint: '/',
        system: true
    },
    {
        device: '/dev/sdb',
        description: 'DataTraveler 2.0',
        size: '7.3G',
        mountpoint: '/media/UNTITLED',
        name: '/dev/sdb',
        system: false
    }
]

Вы можете отфильтровать список по тем, у которых есть system: false, чтобы получить съемные.

Что касается определения того, был ли подключен диск, вы можете вызывать drivelist с интервалом и сравнивать новый результат со старым, чтобы определить какие-либо дополнения. Вы можете повторно использовать следующие код, выполняющий операцию сравнения двух выходных данных drivelist::

_ = require('lodash')

containsDeep = (array, item) ->
    return _.any(_.map(array, _.partial(_.isEqual, item)))

differenceDeep = (x, y) ->
    return _.filter(x, _.partial(_.negate(containsDeep), y))

createDiffOperation = (type, element) ->
    return {
        type: type
        drive: element
    }

var drivelistDiff = (previous, current) ->
    additions = differenceDeep(current, previous)
    removals = differenceDeep(previous, current)

    mappingAdditions = _.map(additions, _.partial(createDiffOperation, 'add'))
    mappingRemovals = _.map(removals, _.partial(createDiffOperation, 'remove'))

    return {
        drives: current
        diff: _.union(mappingAdditions, mappingRemovals)
    }
person jviotti    schedule 01.04.2016