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