#!/bin/sh ## Shows bitrate, frequency, play time, and (if space) size of given files. ## Usage: mp3bitrate FILE [FILE...] ## Fails over to using file on non-mp3s or if lacking the "mp3info" command. ## mp3bitrate 0.4 (c) 2008 Adam katz , free under LGPL v2+ help() { sed -e '/^## /!d' -e 's///' "`which $0 || echo $0`"; exit 1; } [ $# = 0 ] && help if type mp3info >/dev/null 2>&1 then true else file "$@"; exit $? fi eval `resize 2>/dev/null` COLS="$((${COLUMNS:-80} - 3))" # find longest filename length. is there a better way to do this? for file in "$@"; do [ ${length:-5} -lt "${#file}" ] && length="${#file}"; done length=$(($length + 2)) # account for colon and spaces [ $(($length + 24)) -lt $COLS ] && size=true for file in "$@"; do [ "${file#-}" != "$file" ] && ! ls -d -- "$file" >/dev/null 2>&1 && help name="$file: " while [ "${#name}" -lt $length ]; do name="$name "; done # pad filename width [ -n "$size" ] && size=`ls -lh "$file" 2>/dev/null |awk '{printf " "$5}'` # parse mp3 |pad times |show if output is good || or else run file on it mp3info -rm -p "${name}%r kbps %q kHz %m:%s$size\n" "$file" 2>&1 \ |perl -pne 's/:(\d( |$))/:0$1/' |GREP_OPTIONS='' grep '[0-9] kbps' \ || file "$file" |perl -pne "s|$file: |$name|;s/^(.{$COLS}).{4,}$/\$1.../" done