Tömeges átnevezési probléma [Megoldva]

Sziasztok!

Ki tudnátok segíteni egy olyan szkripttel (bash v python), ami rekurzívan az adott könyvtár összes alkönyvtárában található fájlok/könyvtárak nevében kicseréli az ékezetes betűket nem ékezetesekre, és az olvashatatlan karaktereket aláhúzásjelre?

A problémám, hogy a fájlnevek egy más karakterkódolású szerverről lettek átemelve debian-ról ubuntura, és a a fájl nevekben mindeféle jelek, és kérdőjelek is keletkeztek.
Az eredeti állományhoz már nem lehet hozzáférni.

pl.: spir�lf�zet.txt --> spir_lf_zet.txt

pl Árvíztűrő_tükörfúrógép.txt --> Arvizturo_tukorfurogep.txt lesz

A következővel próbálkoztam, de sajnos nem cseréli le, csak annyit ír a fájlokhoz, hogy kihagyva:

#!/bin/bash

if [ $# -ne 1 ]
then
echo "***Használat: $programnev <útvonal>"
exit 1
fi

if cd "$1" 2>/dev/null
then
read -p "* Fájlok átnevezése a következö könyvtárban: $1 - mehet? (i/n)" valasz
[ $valasz != 'i' ] 2>/dev/null && exit 1
else
echo "***Hiba: a megadott könyvtár ($1) nem létezik."
exit 1
fi

counter=1
for betu in a e i o o o u u u A E I O O O U U U
do
ekezetnelkuli[$counter]="$betu"
counter=`expr $counter + 1`
done

for i in *
do
if [ `echo $i | grep -e '[^a-zA-Z0-9._]' | wc -l` -eq 0 ]
then
echo -e "*\t$i kihagyva"
continue
fi

counter=1
filename=$i
orig_filename=$filename

for j in á é í ó ö ő ú ü ű Á É Í Ó Ö Ő Ú Ü Ű
do
temp=`echo "$filename" | sed "s/$j/${ekezetnelkuli[$counter]}/g"`
filename=$temp
counter=`expr $counter + 1`
done

safefilename=`echo "$filename" | sed 's/[^a-zA-Z0-9._]/_/g'`

if [ ! -r "$safefilename" ]
then
mv -i "$i" "$safefilename" && echo " $orig_filename ---> $safefilename"
else
echo "***Hiba: a '$i' fájl nem nevezhető át, a fájlnév már létezik: $safefilename"
fi
done

Előre is köszönöm!

Megoldás ez lett:

convmv --notest -f latin2 -t utf8 -r /elérési/út

Hozzászólások

A man oldal eleje:

convmv - converts filenames from one encoding to another
Synopsis

convmv [options] FILE (S) ... DIRECTORY (S)
Options

-f ENCODING

specify the current encoding of the filename(s) from which should be converted
-t ENCODING
specify the encoding to which the filename(s) should be converted
-i

interactive mode (ask y/n for each action)

-r

recursively go through directories