Как получить серийный номер флешки в bash

Это функция bash, которая рекурсивно выводит имена, найденные в верхнем каталоге.:

mytree () (
    topdir="${1-.}"
    indent="${2-0}"

    shopt -s nullglob
    shopt -s dotglob

    # output directory name
    printf "%${indent}s'%s'/\n" "" "${topdir##*/}"

    indent=$(( indent + 4 ))

    for name in "$topdir"/*; do
        if [ -h "$name" ]; then
            # output symbolic link name and target
            printf "%${indent}s'%s' --> '%s'\n" "" "${name##*/}" "$( readlink -- "$name" )"
        elif [ -d "$name" ]; then
            # recurse into directories
            mytree "$name" "$indent"
        else
            # output other type of name (not directory or symbolic link)
            printf "%${indent}s'%s'\n" "" "${name##*/}"
        fi
    done
)

Функция mytreeпринимает один аргумент (второй аргумент используется только в рекурсивных вызовах )который является верхним каталогом для обработки. Если аргументы не указаны, он будет использовать текущий каталог в качестве верхнего каталога для списка.

Вывод выглядит следующим образом:

'Work'/
    'Data'/
        's3wes.all.tab.frq.counts'
        's3wes.con.tab.frq.counts'
        'sullivan.txt'
    'Development'/
        'ENA-submission'/
            '.git'/
                'COMMIT_EDITMSG'

и т. д.

То есть имена заключаются в одинарные кавычки, а каталоги заканчиваются /. Кроме того, символические ссылки будут отображаться как, например,

'embl-validator.jar' --> 'embl-api-validator-1.1.158.jar'

Формат вывода можно легко изменить, изменив три вызова printf.

0
15.11.2019, 18:30
3 ответа

Я использую инструмент smartctl:

# smartctl /dev/sda -i | grep Serial
Serial Number:    S1D3LYBG290266

Я предпочитаю его lsblkпросто потому, что первый лучше читается -человеком, но если он вам нужен в скрипте bash, он бесполезен;

0
28.01.2020, 02:21

Использованиеlsblk:

$ lsblk --output KNAME,SERIAL /dev/sdb
KNAME SERIAL
sdb   4CEDFB6D543AF360199308B2

Я дважды тестировал одно и то же устройство, всегда получал один и тот же серийный номер.

4
28.01.2020, 02:21

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

#!/bin/bash
for C in `ls /sys/block/`; do 
    RE=`cat /sys/block/$C/removable`
        if [ $RE == "1" ] ;then 
            #VENDOR=`/bin/udevadm info --name=/dev/$C | grep ID_VENDOR=|awk -F"=" ' { print $2}'`
            #MODEL=`/bin/udevadm info --name=/dev/$C | grep ID_MODEL=|awk -F"=" ' { print $2}'`
            #SERIAL=`/bin/udevadm info --name=/dev/$C | grep SERIAL_SHORT|awk -F"=" ' { print $2}'`
            #echo $VENDOR-$MODEL"-"$SERIAL #print as per your taste
            USB_SERIAL=`/bin/udevadm info --name=/dev/$C | grep ID_SERIAL=|awk -F"=" ' { print $2}'|awk -F"-" ' { print $1}'`
            echo  $USB_SERIAL #or just the default one
        fi 
done

JetFlash _Transcend _4 ГБ _08XHIHH4

0
28.01.2020, 02:21

Теги

Похожие вопросы