#!/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') 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" mv "$old" "$new"; fi } do_folders .