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
- 3268 megtekintés
Hozzászólások
convmv parancs erre van.
- A hozzászóláshoz be kell jelentkezni
Eddig nem hallottam róla, paraméterezéséről tudnál valamit írni ?
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Köszönöm ez segített:
convmv --notest -f utf8 -t latin2 -r /elérési/út
- A hozzászóláshoz be kell jelentkezni
A Holdra szállás után 40 évvel... még latin2?:)
- A hozzászóláshoz be kell jelentkezni
Első körben ez kellet neki, mert nem akarta megcsinálni:
convmv --notest -f utf8 -t latin2 -r /elérési/út
Utána pedig :
convmv --notest -f latin2 -t utf8 -r /elérési/út
Irány a hold úrja :D
- A hozzászóláshoz be kell jelentkezni
Mondom: RÓMAI :)))
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
++
"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."
- A hozzászóláshoz be kell jelentkezni