#!/bin/rc name=`{tag/read $* | awk ' function error(msg) { printf("%s: %s\n",j "'$0'", msg) > "/fd/2" exited=msg exit msg } BEGIN { FS=" " if(!match("'$1'", "\\.[^.]+$")) error("no extension") ext=substr("'$1'", RSTART+1, RLENGTH) } { r[$1] = $2 } END { # END is run even after another pattern has called exit if(exited) exit exited if(!r["track"]) error("no track") gsub("[^0-9].*$", "", r["track"]) if(!r["title"]) error("no title"); gsub(" ", "_", r["title"]) gsub("[/+]", "-", r["title"]) gsub("['',()\\?!:]", "", r["title"]) gsub("&", "and", r["title"]) printf("%s%.2d_-_%s.%s\n", r["disc"], r["track"], r["title"], ext) } '} if(~ $name '') exit echo mv $1 `{basename -d $1}^/^$name