Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Johnycfc 14 Ledna 2011, 18:00:09
-
Dobrý den,
v jedné složce mám několik set souborů jak v kódování WINDOWS-1252, tak i v UTF-8 a potřebuji je mít všechny v UTF-8. Jakmile provedu příkaz, že to chci z WINDOWS-1252 do UTF-8 a ten soubor je v UTF-8, tak se ty znaky zobrazují špatně (např. francouzština). Dalo by se to zjistit přes enca nebo i další příkazy zda je to v UTF-8, ale těch souborů je dost a následné kopírování, vymazávání a vkládání zpět je zdlouhavé. Navíc budu to potřebovat i do budoucna, není to tedy jednorázová akce. Enca je perfektní věc, jestli je kódování v UTF-8 nebo WINDOWS-1250 a zadám do UTF-8, tak mi to nic nepodělá a bude to prostě správně v UTF-8. Bohužel tam nefunguje WINDOWS-1252 (francouzština aj. jazyky). Něco takového hledám. Nejradši bych to měl na jedno zkopírování do terminálu s pouhou změnou adresáře. Zkoušel jsem hledat i na Google a nejlépe se na to hodí asi:
recode utf8..utf16 <file >/dev/null || recode cp1252..utf8 <file>newfile
Potřeboval bych to napsat, tak abych nemusel kopírovat názvy jednotlivých souborů, ale mohl zadat celou složku. Potřebuji přepsat ty soubory. Nejsem tak zkušený, abych to zvládl sám nebo jakékoli jiné funkční řešení.
Děkuji mnhokrát
-
a iconv znas?
jinak soubory v adreari projdes ala:
find *.priponka | while read file; do prikaz "$file"; done
-
nepochopil jsem zda se to týká obsahu či pouze jmen souborů - na jména doporučím toto:
CONVMV
viz http://man-wiki.net/index.php/1:convmv
nejprve pustíš
convmv -r -f cp1252 -t UTF-8 /home/pavel
projede všechny podadresáře a POUZE VYPÍŠE jaké změny udělá (CP z jaké do jaké si upravíš)
pak pouze přidáš --notest
convmv --notest -r -f cp1252 -t UTF-8 /home/pavel
a během chvilky máš hotovo :-)
Doplňuji:
-r projede podadresáře
-f výchozí codepage (může být i tvar ISO-xxxx-x)
-t do jaké codepage převést
-
Ja pouzivam na prevod titulku z cp1250 nasledujici humpolacky skript.
#!/bin/bash
rm -rf ./zaloha-titulku
mkdir ./zaloha-titulku
find . \! -path ./zaloha-titulku/\* -type f -iregex '.*\(srt\|txt\|sub\)' | while read F
do cp -r --parents "$F" ./zaloha-titulku
done
find . \! -path ./zaloha-titulku/\* -type f -iregex '.*\(srt\|txt\|sub\)' | while read F
do if [ "`file "$F" | grep -o Non-ISO`" = "Non-ISO" ]
then cstocs -i cp1250 utf8 "$F"
fi
done
Pro vase/tve potreby bych ho upravil:
#!/bin/bash
rm -rf ./zaloha
mkdir ./zaloha
find . \! -path ./zaloha/\* -type f | while read F
do cp -r --parents "$F" ./zaloha
done
find . \! -path ./zaloha/\* -type f | while read F
do if [ "`file "$F" | grep -o cp1252`" = "cp1252" ]
then cstocs -i cp1252 utf8 "$F"
fi
done
Prvni cast zazalohuje soubory, vdruhe se otestuje o jaky soubor jde a pak se obsah souboru prevede na utf8
Doufam, ze jsem to pri tom prevodu nejak nepomrsil a urcite to jde resit nejak elegantnejs.