I got a killer one-liner:
Code:
find . -name '*;*' -exec bash -c 'mv "{}" "$(echo "{}" | sed -e "s/;[0-9]*\$//g")"' \;
It works for files with spaces in the name (this was the hardest part to figure out), and won't touch files with a ; followed by digits in the middle of the name (only at the end). It's also fully recursive through the directory structure, or only in the current directory or however you wish by tweaking the find flags. Using find is safer than ls because of the variety of conditions under which ls could produce more information than just the filename, for example if ls is aliased to 'ls -l' or such.