All pastes #294731 Raw Edit

yr

public text v1 · immutable
#294731 ·published 2006-12-28 19:36 UTC
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"; echo "$new: $old"; fi

        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"; echo "$new: $old"; fi
        
    fi

}

do_folders .