Ékezetes fájlnevek

Fórumok

Sziasztok!

Mintha lett volna már ilyen kérdés a fórumban, de nem találom:
Egy szkriptre lenne szükségem, ami egy könyvtárstrukturában az ékezetes betűket ekezet nelkulire, a szóközöket pedig ilyen_formán átalakítaná a fájl- és könyvtárnevekben.

Tudtok segíteni?

Hozzászólások


find . -depth | while read name
do 
 dir=`dirname $name`
 base=`basename $name`
 new_base=`echo "$base" | tr "[áéíóöőüúűÁÉÍÓŐÖÜÚŰ\ ]" "[aeiooouuuAEIOOOUUU_]"`
 if [ ! -e "$dir/$new_base" ]
 then mv "$dir/$base" "$dir/$new_base"
 else echo "Already exists: $dir/$new_base"
 fi
done

Köszönöm!

Valami miatt még nem tökéletes:

[1]
[á é]
árak 061112.doc

strukturában futtatva:

~Desktop/1$ sh /home/user/ekezet
dirname: extra operandus: ""é/árak""
Próbáld a "dirname --help"-et.
basename: extra operandus: ""061121.doc""
Próbáld a "basename --help"-et.
Already exists: /
dirname: extra operandus: ""é""
Próbáld a "dirname --help"-et.
mv: stat "/á" sikertelen: Nincs ilyen fájl vagy könyvtár
Already exists: ./.
$

Gondolom, van backup az eredeti fájlneveidről. Ha nem, akkor az az így járás tipikus esete, nem kellett volna mástól származó ismeretlen, teszteletlen, szar kódot használni. Szóval a szkript hibás eredményét töröld és indulj ki újra a régi jó ékezetes fájlnevekből.

A tr parancs környékén három hiba van. Az egyik nem lényeges, ez a szögletes zárójelek, amik elvileg semmi vizet nem kavarnak, de semmi szerepük nincs, és arról tesznek tanúságot, hogy imp nem igazán ismeri a tr használatát, vagy legalábbis hirtelen összekeverte valami mással. (Ugyanis lecseréled a [ jelet [-re, a ]-t pedig ]-re. Semmi értelme. Persze a ] nem is ]-re cserélődik, lásd a következő két hibát.)

A másik hiba az idézőjelen belüli backslash majd szóköz, ami arról tesz tanúságot, hogy imp nem igazán ismeri a bash escape-elési szokásait, ez ugyanis backslash és utána szóköz marad.

A harmadik hiba pedig az, hogy az Ubuntu UTF-8 kódolású fájlneveket használ, a tr parancs viszont nem tudja kezelni az UTF-8-at. Tehát a tr felejtős. Helyette sed-et lehet használni például: sed "y/áéí /aei_/"

A szkript többi részét meg sem néztem.

Szóval vak vezet világtalant...

Tibyke, te ugye ezeket mind láttad? Mert az arcod nagy, az kiderült. És a tudásod? Arról még nem győztél meg. Okosabban tennéd, ha csöndben maradnál.

Teszt könyvár és fájl volt, nem bizalmatlanságból, de ahogy mondod, élesben csak a már tesztelt dolgokat...
Szóval nem gond.
Az esti tudásbővítés témája pedig megvan, pár próba után menni fog ez. Csak gondoltam, hátha valakinek már van kész megoldása, és nem kizárólag önös érdekből, sokaknak lehet szüksége rá, ez elég gyakori feladat.
Ha lesz eredmény, természetesen írom.

Tökigazad van, a tr-ben a [,]-t csak rossz beidegződésre tudom fogni, most megjegyeztem, meg hogy az utf8ot is bebukja.
Eszkép: ha jól tudom, a bash-nek három escape szekvenciája van: \", \', \\. Jól tudom?
Meg nézd meg a szkript többi részét is, ha már itt vagy, sértő azt sugallnod, hogy totál inkompetens vagyok...

Ha a man bashban benne lett volna, az én kérdésem el nem hangzott volna. Az eszképelés mint most rájöttem, még összetettebb is, mint amennyire azt én az eddigi tapasztalataimból ismerem, főleg, hogy a builtinekben, meg egyéb utilitykben plusz escapeléseket is lehet még használni..

szerk: itt van pár dolog