--- /dev/null
+#!/bin/sh
+set -eu
+
+if [ ! -r $HOME/.abcde.conf ]; then
+ echo "E: ~/.abcde.conf not found." >&2
+ exit 1
+fi
+
+. $HOME/.abcde.conf
+FORMAT=${OUTPUTFORMAT##*/}
+[ "$1" = -v ] && FORMAT=${VAOUTPUTFORMAT##*/} && shift
+
+extract_tag()
+{
+ local file; file="$1"
+ vorbiscomment -l "$file" | sed -rne "s,^${2}=,,p"
+}
+
+get_filename()
+{
+ local file; file="$1"
+ local filename
+
+ TRACKNUM="$(extract_tag "$file" TRACKNUMBER)"
+ TRACKFILE="$(extract_tag "$file" TITLE)"
+ ARTISTFILE="$(extract_tag "$file" ARTIST)"
+
+ eval mungefilename "$FORMAT"
+}
+
+for file in "$@"; do
+ newname="$(get_filename "$file").ogg"
+ case "$file" in */*) newname="${file%/*}/$newname";; esac
+ [ "$file" = "$newname" ] ||
+ { echo "I: $file → $newname"; mv "$file" "$newname"; }
+done