Это функция 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
.
Я использую инструмент smartctl
:
# smartctl /dev/sda -i | grep Serial
Serial Number: S1D3LYBG290266
Я предпочитаю его lsblk
просто потому, что первый лучше читается -человеком, но если он вам нужен в скрипте bash, он бесполезен;
Использованиеlsblk
:
$ lsblk --output KNAME,SERIAL /dev/sdb
KNAME SERIAL
sdb 4CEDFB6D543AF360199308B2
Я дважды тестировал одно и то же устройство, всегда получал один и тот же серийный номер.
После долгих поисков я нашел лучший скрипт, он может быть полезен и другим. Это будет отображать только съемные устройства, такие как флешка и т. Д. Этот скрипт будет работать для всех пользователей моего 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