bash – lista USB-sticków

Zdarzyło się raz… że potrzebna była lista ścieżek dostępnych dysków USB, dla skryptu BASH po OS Ubuntu. Dało to pole do małych eksperymentów, oto one.

  1. rozpocząłem od listy. lsbk wypisuje listę wszystkich urządzeń blokowych, prócz RAM-dysków:
wiks@dellwiks:~$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0  97,9M  1 loop /snap/core/10577
loop1    7:1    0   140K  1 loop /snap/gtk2-common-themes/13
loop2    7:2    0  97,9M  1 loop /snap/core/10583
loop3    7:3    0  31,1M  1 loop /snap/snapd/10492
loop4    7:4    0  31,1M  1 loop /snap/snapd/10707
loop5    7:5    0 290,4M  1 loop /snap/vlc/1700
loop6    7:6    0  64,8M  1 loop /snap/gtk-common-themes/1514
loop7    7:7    0  55,4M  1 loop /snap/core18/1944
loop8    7:8    0  42,7M  1 loop /snap/leafpad/79
sda      8:0    0   477G  0 disk 
├─sda1   8:1    0   277G  0 part /
├─sda2   8:2    0   100G  0 part 
└─sda3   8:3    0   100G  0 part 
sdb      8:16   0   149G  0 disk 
└─sdb1   8:17   0   149G  0 part 
sdc      8:32   0 931,5G  0 disk 
├─sdc1   8:33   0 500,5G  0 part 
└─sdc3   8:35   0   431G  0 part 
sdd      8:48   1  57,9G  0 disk 
└─sdd1   8:49   1  57,9G  0 part /media/wiks/64C5-C9D5
sde      8:16   1  14,5G  0 disk /media/wiks/USB_PLASNIE1
sdf      8:32   1  14,9G  0 disk 
└─sdf1   8:33   1  14,9G  0 part /media/wiks/DISK_IMG1
sr0     11:0    1  1024M  0 rom  

2.ograniczając to do dysków, przegrepuję po 'sd’: lsblk|grep sd :

wiks@dellwiks:~$ lsblk|grep sd
sda      8:0    0   477G  0 disk 
├─sda1   8:1    0   277G  0 part /
├─sda2   8:2    0   100G  0 part 
└─sda3   8:3    0   100G  0 part 
sdb      8:16   0   149G  0 disk 
└─sdb1   8:17   0   149G  0 part 
sdc      8:32   0 931,5G  0 disk 
├─sdc1   8:33   0 500,5G  0 part 
└─sdc3   8:35   0   431G  0 part 
sdd      8:48   1  57,9G  0 disk 
└─sdd1   8:49   1  57,9G  0 part /media/wiks/64C5-C9D5
sde      8:16   1  14,5G  0 disk /media/wiks/USB_PLASNIE1
sdf      8:32   1  14,9G  0 disk 
└─sdf1   8:33   1  14,9G  0 part /media/wiks/DISK_IMG1

3.a ponieważ interesuje mnie jedynie kolumna ze ścieżką (czyli 7-ma) ale tylko wtedy, gdy ścieżka zawiera 'media’ czyli zamontowane to coś jako dysk USB:

wiks@dellwiks:~$ lsblk|grep sd|awk '{print $7}'|grep media
/media/wiks/64C5-C9D5
/media/wiks/USB_PLASNIE1
/media/wiks/DISK_IMG1

4.tak. Wygląda ładnie, jednak aby korzystać z tego jako listy ścieżek reprezentujących dołączone dyski USB, trzeba to (teraz traktowane jako jeden string) podzielić w miejscach znaków nowej linii. Czyli to co uzyskamy w BASH:

#!/bin/bash

USBPATHS_STR=`lsblk|grep sd|awk '{print $7}'|grep media`

USBPATHS_LIST=(${USBPATHS_STR//$'\n'/ })

if [ ${#USBPATHS_LIST[@]} -eq 0 ]; then

    echo 'none of USBstick found...'

else

    for i in ${!USBPATHS_LIST[@]};
    do
        echo 'and one more local USB: '${USBPATHS_LIST[$i]}
    done

fi

5. dzielę przez znak końca linii, a następnie, jeśli jakieś elementy listy występują, iteruje po nich, wypisując ścieżki do dysków.

Dodaj komentarz

Translate »