scripts/metaflac-field2field/metaflac-field2field.sh

76 lines
2.5 KiB
Bash
Executable File

#!/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/move on
# FLAC file metadatas.
# Launch this script without arguments to display usage.
# ----
# Ce script utilise metaflac pour effectuer des actions de copie ou
# déplacement de champ à champ sur les fichiers FLAC.
# Lancer ce script sans argument pour afficher son utilisation.
print_usage()
{
echo "Utilisation :"
echo " $0 <ACTION> <SRC_FIELD> <DST_FIELD> <FILE.flac> [ <FILE2.flac> [...] ]"
echo "ACTION : copy | move | rmcopy | mvcopy"
echo " copy : chaque occurrence de SRC_FIELD est dupliquée pour créer une occurrence de DST_FIELD ; toutes les occurrences existantes de SRC_FIELD et de DST_FIELD sont conservées."
echo " move : chaque occurrence de SRC_FIELD est déplacée pour créer une occurrence de DST_FIELD ; les occurrences existantes de DST_FIELD sont conservées."
echo " rmcopy : les occurrences existantes de DST_FIELD sont supprimées, puis chaque occurrence de SRC_FIELD est dupliquée pour créer une occurrence de DST_FIELD ; les occurrences de SRC_FIELD sont conservées."
echo " rmmove : les occurrences existantes de DST_FIELD sont supprimées, puis chaque occurrence de SRC_FIELD est déplacée pour créer une occurrence de DST_FIELD."
exit 1
}
# Bon nombre d'arguments ?
if [ $# -lt 4 ] ; then
echo "Mauvais nombre d'arguments !"
print_usage
fi
ACTION=$1
shift
# Type d'action connue ?
case $ACTION in
copy) ;;
move) ;;
rmcopy) ;;
rmmove) ;;
*) echo "Action inconnue !" ; print_usage ;;
esac
SRC_FIELD=$1
shift
DST_FIELD=$1
shift
echo "Champ source : $SRC_FIELD"
echo "Champ destination : $DST_FIELD"
echo "Action : $ACTION"
echo "Traitement des fichiers..."
if echo $ACTION | egrep '^rm' >/dev/null ; then
echo "Suppression du champ $DST_FIELD sur tous les fichiers..."
metaflac --remove-tag=$DST_FIELD "$@"
fi
for file in "$@" ; do
echo "Fichier : $file"
metaflac --show-tag=$SRC_FIELD "$file" | sed 's/^[A-Z]\+=//' | while read c1 ; do
metaflac --set-tag=$DST_FIELD="$c1" "$file"
done
done
if echo $ACTION | egrep 'move$' >/dev/null ; then
echo "Suppression du champ $SRC_FIELD sur tous les fichiers..."
metaflac --remove-tag=$SRC_FIELD "$@"
fi