--- /dev/null
+#! /bin/bash
+#
+# Directory where sysfs is mounted
+SYSFS_DIR=/sys
+
+# handle block devices and their partitions
+for i in ${SYSFS_DIR}/block/*; do
+ # each drive
+ echo ${i#${SYSFS_DIR}/block/}
+
+ # each partition, on each device
+ for j in $i/*; do
+ if [ -f $j/dev ]; then
+ echo ${j#${SYSFS_DIR}} | cut --delimiter='/' --fields=4-
+ fi
+ done
+done
+
+# all other device classes
+for i in ${SYSFS_DIR}/class/*; do
+ for j in $i/*; do
+ if [ -f $j/dev ]; then
+ echo ${j#${SYSFS_DIR}} | cut --delimiter='/' --fields=4-
+ fi
+ done
+done
+