Debian, Como converter o sistema de arquivos do ISO-8859-1 para o UTF-8?

7

Eu tenho um pc antigo que está rodando Debian estável, que precisa de uma atualização. O problema é que ele está usando o latin1 (ISO-8859-1) para tudo, e desde que o resto do mundo se mudou para o UTF-8, eu planejo converter este computador também.

E para essa pergunta eu vou me concentrar nos arquivos que são servidos com o Samba, e alguns tem alguns caracteres latin1 nos nomes dos arquivos (como åäö).

Agora meu plano é mover todos os dados deste computador antigo para um novo que esteja rodando Debian estável (mas com UTF-8).

Alguém tem uma boa ideia?

Observação : depois planejo usar iconv para converter o conteúdo de alguns arquivos com algo parecido com isto:

iconv --from-code=ISO-8859-1 --to-code=UTF-8 iso.txt > utf.txt

No entanto, eu não sei de uma boa maneira de converter o próprio sistema de arquivos.

Nota : normalmente, normalmente apenas scp de um computador para o seguinte, mas depois acabo com caracteres latin1 no sistema de arquivos utf-8.

Atualizar : Fiz um pequeno teste com uma mão cheia de arquivos (com caracteres engraçados) nos nomes dos arquivos, e isso parecia funcionar.

convmv -r -f ISO-8859-1 -t UTF-8  *

Nota : -r = recursivo; -f / -t = de / para.

Então foi só para executar com o --notest

convmv -r -f ISO-8859-1 -t UTF-8 --notest *

Nada mais do que isso.

    
por Johan 17.08.2009 / 11:45

5 respostas

14

Use convmv:

Package: convmv
Priority: optional
Section: utils
Installed-Size: 88
Maintainer: Raphael Zimmerer <[email protected]>
Architecture: all
Version: 1.12-1
Depends: perl
Filename: pool/main/c/convmv/convmv_1.12-1_all.deb
Size: 20052
MD5sum: dcc45d5b8517026f588d769d81d67768
SHA1: 55da9650cfee5c64d8a4fdf278aaf9401a5e5dec
SHA256: 0a8b0165a78dc42f7dc665a14d21c22ce0433d115fe537be2af74682d3b82a5f
Description: filename encoding conversion tool
 convmv can convert a single filename, a directory tree or all files
 on a filesystem to a different encoding. It only converts the
 encoding of filenames, not files contents. A special feature of
 convmv is that it also takes care of symlinks: the encoding of the
 symlink's target will be converted if the symlink itself is being
 converted.
 .
 It is also possible to convert directories to UTF-8 which are already
 partially UTF-8 encoded.
 .
 Keywords: rename, move
Tag: devel::i18n, implemented-in::perl, interface::commandline, role::program, scope::utility, works-with::file

apt-get install convmv

: -)

    
por 17.08.2009 / 12:19
4

Nota para os leitores que se deparam com esta página antes de transferirem os arquivos:

você pode fazer a transferência com um rsync recente e com a opção --iconv:

rsync -va --iconv=utf8,iso88591 /source/latin1/ /destination/utf8

(sim, a ordenação dos conjuntos de caracteres iconv não é intuitiva!)

Para quando a transferência já foi feita, na verdade convmv é a solução.

    
por 12.12.2010 / 13:23
0

Existe um Unicode Char Encoding Converter que suporta a conversão de codificação de caracteres entre Unicode (UTF-8 / UTF-16 / UTF-7 / UTF-32) e não-Unicode (Ansi, GBK simplificado chinês, BIG5 tradicional chinês, SHIFT-JIS japonês, EUC-JP japonês, caracteres euc-kr coreanos, conjunto de codificação, etc.).

    
por 16.11.2010 / 01:12
0

Execute isto no diretório atual:

 for f in 'ls'; do
 iconv --from-code=iso-8859-1 --to-code=utf-8 $f -o $f;
 done
    
por 18.06.2014 / 16:02
0

Eu testaria primeiro se o arquivo não estivesse na codificação de destino, caso contrário você pode atrapalhar seus arquivos, eu acho. (o exemplo abaixo para zsh) você pode adaptar o código e colocá-lo dentro de um loop "for".

codification="'file -bi "$1" | awk -F"=" '{print $NF}''"

[[ "$codification" != "utf-8" ]]  && iconv -f ISO8859-1 -t UTF-8 "$1" > $outfile
    
por 25.06.2015 / 12:27