Portál AbcLinuxu, 10. května 2025 20:45
Často řešeným problémem v diskuzích je změna kódování jmen souborů, která může být zapotřebí po změně distribuce či jen konfigurace systému. Krátký článek o nástroji convmv osvětlí konverzi jmen v konzoli nejen začátečníkům.
Tiskni
Sdílej:
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 *
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.