Portál AbcLinuxu, 10. května 2025 19:50
for f in $(find /); do iconv -f iso-8859-2 -t utf-8 $f >/tmp/xx && mv /tmp/xxx $f; done
Je to samozrejme nedokonale, ale staci vyresil nazvy s mezerami apod. (mozna to taky zahodi pravaa tak, ale to vse se da osetrit) a je to...
Je to samozrejme nedokonale, ale staci vyresil nazvy s mezerami apod. ...Uááááá, no bodejď, když někdo použije
for f in $(find /)
, tak si nic jiného nezaslouží než mít problémy a to hodně velké, nejlépe smažení v pekelných plamenech find -type f -exec recode latin2..utf8 {} \;
je bezpecnejsi a kratsi.
Koukam do historie a takhle jsem nedavno resil prevod cestiny pro phpBB z windows-1250 na utf-8
find lang_czech -type f -exec iconv -f windows-1250 -t utf-8 -o utf8_{} {} \;
Ale ma to jednu velkou nevyhodu. Nejdriv jsem si musel pripravit adresarovou strukturu podle te puvodni - coz zde nebyl problem, ale pro vetsi pouziti by mohl.
Ale prave je blby, ze iconv neumi udelat tohle: iconv aaa > aaa
Musim to sypat do jinyho souboru a pak tim nahradit ten puvodni.
Ten musím mít někde uložený, znaky tam musí být v nějakém kódování a to kódování by mělo být známo tomu, kdo se ty bity jako nějaký text v nějakém kódování snaží interpretovat.Jak to může být známo v případě obyčejného souboru? Pak se ten interpret musí spolehnout na nějakou informaci z vnějšku nebo použít nějakou implicitní volbu. Pokud uložím seznam souborů ve Windows, pak určitě ani po překódování názvů souborů nebudou položky toho seznamu správně ukazovat na soubory. Musel bych ještě překódovat ten soubor se seznamem. Pokud nepoužiju diakritiku, tento problém odpadá.
convmv -f latin2 -t utf8 \ --exec 'NEW=`echo #1 |recode -f utf8..latin1|recode latin2..utf8`; mv #1 "$NEW"' \ --nosmart --qto --notest -r *
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.