All pastes #294557 Raw Edit

Anonymous

public text v1 · immutable
#294557 ·published 2006-12-28 17:11 UTC
rendered paste body
#!/usr/bin/env zsh

# Rename MP3 scene 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 renaming 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/,//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

        # Clear away extension.
        #
        extension=${new##*.}
        new=${new%.*}

        # Specify renaming 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/,//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=`echo "$new"."$extension"`

        mv "$old" "$new"; fi

}

do_folders .