Release new version 0.19.7
[grml-etc-core.git] / usr_share_grml / zsh / functions / lsdisk
1 # show labels and uuids of disk devices
2 emulate -L zsh
3 setopt extendedglob
4
5 local -a -U disks
6 local -A mountinfo
7
8 disks=( /dev/disk/by-id/*(N@:A) )
9
10 if (( ${#disks} == 0 )); then
11     printf 'No disks detected.\n'
12     return 1
13 fi
14
15 if [[ -r /proc/mounts ]]; then
16     for cline in "${(f)$(</proc/mounts)[@]}"; do
17         mountinfo["${cline[(w)1]:A}"]="${cline[(w)2,-1]}"
18     done
19 fi
20
21 for dev in "$disks[@]"; do
22     print ${fg_bold[red]}${dev}${reset_color} \
23           /dev/disk/by-label/*(@e/'[[ ${REPLY:A} == $dev ]] && REPLY=${fg[blue]}LABEL=${REPLY:t}${reset_color}'/N) \
24           /dev/disk/by-uuid/*(@e/'[[ ${REPLY:A} == $dev ]] && REPLY=${fg[green]}UUID=${REPLY:t}${reset_color}'/N)
25     if [[ -n "${mountinfo["$dev"]}" ]]; then
26         print -f " Mount: %s -t %s -o %s\n" \
27                  ${mountinfo["$dev"][(w)1]} \
28                  ${mountinfo["$dev"][(w)2]} \
29                  "${mountinfo["$dev"][(w)3,-5]}"
30     fi
31     for sysdevsize in \
32         /sys/block/${dev:t}/size(N) \
33         /sys/block/${${dev:t}%%<->}/${dev:t}/size(N)
34     do
35         print -f "  Size: %.3f GiB (%d Byte)\n" \
36                  $(($(<$sysdevsize)/(2.0*1024.0*1024.0))) \
37                  $(($(<$sysdevsize)*512))
38     done
39
40     print -f "    Id: %s\n" /dev/disk/by-id/*(@e/'[[ ${REPLY:A} == $dev ]]'/N:t)
41 done