#!/bin/sh # # metaflac-field2field.sh, Copyright © 2009 Matteo Cypriani # # This program is free software. It comes without any warranty, to # the extent permitted by applicable law. You can redistribute it # and/or modify it under the terms of the Do What The Fuck You Want # To Public License, Version 2, as published by Sam Hocevar. See # http://sam.zoy.org/wtfpl/COPYING for more details. # # This script uses metaflac to process field to field copy/rename on # FLAC file metadatas. # Launch this script without arguments to display usage. # ---- # Ce script utilise metaflac pour effectuer des actions de copie ou # renommage de champ à champ sur les fichiers FLAC. # Lancer ce script sans argument pour afficher son utilisation. #set -x print_usage() { echo "Usage:" echo " $0 [ [...] ]" echo " : copy | move | rmcopy | mvcopy" echo " copy: each occurrence of SRC_FIELD is duplicated to create an occurrence of" echo " DST_FIELD; all the existing occurrences of SRC_FIELD and DST_FIELD are" echo " kept." echo " move: each occurrence of SRC_FIELD is renamed to create an occurrence of" echo " DST_FIELD; the existing occurrences of DST_FIELD are kept." echo " rmcopy: the existing occurrences of DST_FIELD are deleted, then each" echo " occurrence of SRC_FIELD is duplicated to create an occurrence" echo " of DST_FIELD; the occurrences of SRC_FIELD are kept." echo " rmmove: the existing occurrences of DST_FIELD are deleted, then each" echo " occurrence of SRC_FIELD is renamed to create an occurrence of" echo " DST_FIELD." exit 1 } # Right number of arguments? if [ $# -lt 4 ] ; then echo "Wrong number of arguments!" print_usage fi ACTION=$1 shift # Known action type? case $ACTION in copy) ;; move) ;; rmcopy) ;; rmmove) ;; *) echo "Action unknown \"$ACTION\"!" ; print_usage ;; esac SRC_FIELD=$1 shift DST_FIELD=$1 shift echo "Source field: $SRC_FIELD" echo "Destination field: $DST_FIELD" echo "Action: $ACTION" echo "Processing files..." if echo $ACTION | egrep '^rm' >/dev/null ; then echo "Deleting field $DST_FIELD on each file..." metaflac --remove-tag=$DST_FIELD "$@" fi for file in "$@" ; do echo "Setting field \"$DST_FIELD\" on file: $file" metaflac --show-tag=$SRC_FIELD "$file" | sed 's/^[A-Z]\+=//' | while read c1 ; do echo "Adding $DST_FIELD=$c1..." metaflac --set-tag=$DST_FIELD="$c1" "$file" done done if echo $ACTION | egrep 'move$' >/dev/null ; then echo "Deleting $SRC_FIELD on each file..." metaflac --remove-tag=$SRC_FIELD "$@" fi # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4