前に書いた音楽ファイル用のコードを書き直す

エンコードしたファイルをデコードしたデータと元のファイルのデータとが一致するなら、元のファイルは削除する。
しかし、双方が一致しない場合は元ファイルのみを残す。
エンコードしたファイルは元のファイルと同じディレクトリに保存する。

ファイル名: music2flac.sh
#!/bin/sh

echo "Usage : sh $0"

DIR="/share/Public/Music"
TMP="/tmp/flac.wav"

main() {
 IFS_BACKUP=$IFS
 IFS=$'\n'
 cd "$DIR"
 FILES=`find \( -name *.WAV -o -name *.Wav -o -name *.wav \)`
 for FILE in ${FILES}; do
  if [ -f "$DIR/$FILE" ]; then
   FLAC="$DIR/${FILE%.*}.flac"
   if [ ! -e "$FLAC" ]; then
    echo "Encoding '$DIR/$FILE' to '$FLAC'"
    `flac -s -8 "$DIR/$FILE" -o "$FLAC"`
    `flac -s -d "$FLAC" -o "$TMP"`
    ERR=`cmp "$DIR/$FILE" "$TMP"`
    if [ $ERR ]; then
     echo " [Alert!] Decoded file of '$FLAC' differs from '$DIR/$FILE'"
     rm -f "$FLAC"
    else
     rm -f "$DIR/$FILE"
    fi
    rm -f "$TMP"
   fi
  fi
 done
 IFS=$IFS_BACKUP
 return 0
}

main $@ || exit $?
検証用の一時ファイルの名前を固定したから、コードが短くなったw
2013/03/18 00:54
タグ