#! /bin/sh # $NetBSD: id3info.sh,v 1.1 2007/04/15 15:22:44 agc Exp $ # # Copyright © 2007 Alistair Crooks. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote # products derived from this software without specific prior written # permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # set defaults roots=/usr/music infofile=/usr/music/.id3info append=false # function to trawl through a directory to grab id3 tags from each file # relies on id3 utility to do this dodir() { (cd $1 && for f in *; do if [ -f $f ]; then id3 -l -R $f >> $infofile echo "Directory: $2" >> $infofile elif [ -d $f ]; then dodir $f $2/$f fi done) } # argument processing while [ $# -gt 0 ]; do case $1 in --append) append=true ;; --roots=) roots=$(echo $1 | sed -e 's|--roots=||') ;; --infofile=) infofile=$(echo $1 | sed -e 's|--infofile=||') ;; esac shift done # sort out whether we'll append or start afresh if $append; then echo "Appending to file $infofile" else rm -f $infofile touch $infofile fi # grab all the id3 info for d in $roots; do dodir $d $d done exit 0