#!/bin/bash IFS=$'\n' if [ -z "$1" ] then echo rename files in current folder replacing arg1 with arg2. echo '-n for match non ascii, replace with arg2' exit fi POSTPROC="sed 's, , -> ,'" which ncsv &>/dev/null && POSTPROC="ncsv -c" c=0 if [ "$1" = "-n" ] then for file in $( ls | grep -P "[\x80-\xFF]" ) do echo "$file" '->' "$( echo $file | tr -d \\n\\r | tr -c [:print:] '\000' | sed s/'\x0'/"$2"/g )" c=$(( $c + 1 )) done echo $c' matches. Sure?' read i for file in $( ls | grep -P "[\x80-\xFF]" ) do mv -iv -- "$file" "$( echo $file | tr -d \\n\\r | tr -c [:print:] '\000' | sed s/'\x0'/"$2"/g )" done exit fi ( echo -e "Matching\tReplaced" for file in $( ls | grep -- "$1" ) do echo -e "$file"\\t"$( echo $file | sed s/"$1"/"$2"/g )" done ) | eval $POSTPROC | grep --color=always -E "$1|$" echo 'Sure?' read i for file in $( ls | grep -- "$1" ) do mv -iv -- "$file" "$( echo $file | sed s/"$1"/"$2"/g )" done