Szerintem először nevezd át a fájlokat, azután magyarázd el, hogy szerencsétlen véletlen volt. Ami ráadásul bármikor megismétlődhet. Ilyesmi lenne, nem teszteltem:
#!/bin/sh
LC_ALL=en_US.ISO-8859-1
find . -name '*.txt' | while IFS='\n' read -r L; do
Dir="$(dirname "$L")"
Old="$(basename "$L")"
New="$(printf '%s' "$Old" | LC_ALL=C sed 's/[^A-Za-z0-9_.-]/@/g')"
if [ "x$Old" != "x$New" ];
then printf "mv -- \"%s/%s\" \"%s/%s\"\n" "$Dir" "$Old" "$Dir" "$New"
fi
done