#!/usr/bin/perl =head1 block-devices Display all block devices on system hdparm -t `block-devices` =cut use warnings; use strict; #use autodie; open(my $proc, '<', '/proc/partitions'); my @header; my $last_device; my $name2col; sub col { my ( $name, $line ) = @_; if ( ! $name2col ) { $name2col->{ $header[$_] } = $_ foreach 0 .. $#header; } $line =~ s/^\s+// || die "expected line to start with space: $_\n"; my @c = split(/\s+/, $line, $#header + 1 ); return $c[ $name2col->{ $name } ]; } while(<$proc>) { chomp; if ( ! @header ) { @header = split(/\s+/, $_); next; } next unless $_; my $device = col 'name', $_; if ( $last_device && substr( $device, 0, length($last_device) ) eq $last_device ) { warn "# partition $device\n"; } else { print '/dev/', $last_device = $device, $/; } }