Como forçar a conversão com convmv

2

Eu tenho muitos arquivos com nomes de arquivos na codificação windows-1251. Eu queria convertê-lo para utf8.Mas eu acidentalmente converti-lo erroneamente por convmv:

convmv -r --notest -f windows-1255 -t utf8 *

Então, agora eu preciso convertê-lo do utf8 para o windows-1255 novamente do que do windows-1251 para o utf8, mas o convmv não quer fazer isso:

convmv --notest -f utf8 -t windows-1255 זטחם�.docx
cp1255 doesn't cover all needed characters for: "./זטחם�.docx"
To prevent damage to your files, we won't continue.
First fix this or correct options!

Existe alguma opção --force para convmv? Como posso consertar nomes de arquivos do meu arquivo sem convmv?

Aqui está o exemplo de arquivo link

    
por freemanoid 31.05.2013 / 18:02

1 resposta

2

ESTA NÃO É UMA BOA IDÉIA

O convmv é apenas um script Perl simples, então o código é muito fácil de editar. Está definido para sair se certos testes falharem, dizendo para ignorar os resultados do teste e continuar, eu consegui fazer:

../convmv.modified.pl --notest -f utf8 -t windows-1255 זטחם�.docx 
Your Perl version has fleas #37757 #49830 
cp1255 doesn't cover all needed characters for: "./זטחם�.docx"
mv "./זטחם�.docx"   "./����"
Ready!

Isso criou um arquivo chamado ???? , então eu poderia usar o% normalconvmv para alterar sua codificação para utf8 (tive que usar find porque eu não pude dar ???? como nome de arquivo):

find . -type f -exec convmv --notest -f windows-1255 -t utf8 {} \;

$ find . -type f -exec convmv --notest -f windows-1255 -t utf8 {} \;
Your Perl version has fleas #37757 #49830 
mv "./����" "./זטחם"
Ready!

Em seguida, renomei o arquivo para adicionar a extensão docx ( mv זטחם זטחם.docx ) e poderia abrir o arquivo no libre office.

Esta é uma má ideia porque eu não resolvi o problema que impediu que o convmv convertesse corretamente seus arquivos, eu simplesmente os ignorei. Eu acho que o problema é que sua primeira conversão equivocada adicionou caracteres estranhos ao nome do arquivo que convmv não sabe como lidar. Eu não posso garantir isso (ou mesmo oferecer uma opinião sobre se) isso não prejudicará seus arquivos. Eu recomendo que você experimente primeiro o arquivo e veja se ele realmente funciona.

O outro problema é que eu esperava que o nome do arquivo estivesse no mesmo alfabeto que o texto do arquivo e não é (eu acho), então a operação inteira provavelmente falhou. Como não consigo ler o alfabeto em questão, não posso ter certeza.

De qualquer forma, se você quiser tentar, você precisa fazer as seguintes alterações em /usr/bin/convmv :

  1. Comente a linha 359, altere isto:

    die "To prevent damage to your files, we won't continue.\nFirst fix errors or correct options!\n" if ($errors_occurred);
    

    Para isso:

    #die "To prevent damage to your files, we won't continue.\nFirst fix errors or correct options!\n" if ($errors_occurred);
    
  2. E altere isso (linha 460):

    from_to($newname, $opt_f, $opt_t, Encode::FB_QUIET) or die "SHOULD NOT HAPPEN HERE: conversion error, so suitable charset used?: \"$oldfile\"\nTo prevent damage to your files, we won't continue. First fix this!\n";
    

    para isso:

    from_to($newname, $opt_f, $opt_t, Encode::FB_QUIET);
    
por 06.06.2013 / 15:58