rendered paste body#!/usr/bin/env zsh
# Rename MP3 releases
# TB/SH-090906A GPL
# Avoid breaking in empty places
#
setopt nullglob
# Rename folders
#
function do_folders () {
for old in *; do
if [ -f "$old" ]; then do_files "$old"
elif [ -d "$old" ]; then
# Specify rename rules
#
new=$(echo "$old" | tr "[:upper:]" "[:lower:]")
new=$(echo "$new" | sed -e 's/ /_/g' \
-e 's/\./_/g' \
-e 's/[_-][()]/-/g' \
-e 's/[()][-_]/-/g' \
-e 's/[_-]\{2,3\}/-/g' \
-e 's/[_-]$//g' \
-e 's/[\]\[\!\,'\''\`]//g' \
-e 's/---*/-/g' \
-e 's/___*/_/g' \
-e 's/&/and/g')
# Rename if new differs from old
#
if [ "$old" != "$new" ]; then mv "$old" "$new"; fi
echo "Renaming $old"
cd "$new"; do_folders "$new"; cd ..
else echo "Directory invalid."; fi
done
}
# Rename files
#
function do_files () {
old=$1
new=$(echo "$old" | tr "[:upper:]" "[:lower:]")
if [[ "$old" == *.* ]]; then
# Strip extension for now
#
extension=${new##*.}
new=${new%.*}
# Specify rename rules
#
new=$(echo "$new" | sed -e 's/ /_/g' \
-e 's/\./_/g' \
-e 's/[_-][()]/-/g' \
-e 's/[()][-_]/-/g' \
-e 's/[_-]\{2,3\}/-/g' \
-e 's/[_-]$//g' \
-e 's/[\]\[\!\,'\''\`]//g' \
-e 's/---*/-/g' \
-e 's/___*/_/g' \
-e 's/&/and/g')
new=$(echo "$new" | sed -e 's/^\([0-9]\{2,3\}\)_/\1-/g')
# Add back extension
#
new="$new"."$extension"
# Rename if new differs from old
#
if [ "$old" != "$new" ]; then mv "$old" "$new"; fi
echo "Renaming $old"
fi
}
do_folders .