while [ $# -gt 0 ]; do
file="$1"; shift
- newname="$(echo "$file" | tr -s ' ' '_' | tr -d "\$\!@#%}{)(][\\\~',:?><\"" | sed -e 's/\([0-9]\)_\./\1./g' | sed -e 's/_-_/-/' )"
+ # first turn spaces into underscores. then process characters we don't want
+ # in names. then translate multiple underscores into just one. then turn
+ # number followed by underscore into just number (?). then translate
+ # underscore dash underscore into just dash.
+ newname="$(echo "$file" | tr -s ' ' '_' | tr -d "\$\!|@&#%}{)(][\\\~',:?><\"" | sed -e 's/__/_/g' | sed -e 's/\([0-9]\)_\./\1./g' | sed -e 's/_-_/-/' )"
if [ "$file" != "$newname" ]; then
# we've effected a name change, so let's actually do it.
echo "'$file' => '$newname'"