Pergunta

Dado um diretório de nomes de arquivos que consistem em números e espaços de dois bytes/largura completa (juntamente com alguns números de meia largura e sublinhados), como posso converter todos os números e espaços em caracteres de byte?

Por exemplo, esse nome de arquivo consiste em um número de duplo byte, seguido por um espaço de byte duplo, seguido por alguns caracteres de byte único:

2 2_3.Ext

E eu gostaria de mudar para todos os bytes de um único:

2 2_3.EXT

eu tentei Convmv Para converter de UTF8 para ASCII, mas a mensagem a seguir aparece para todos os arquivos:

"ASCII não cobre todos os personagens necessários para: nome do arquivo"

Foi útil?

Solução 3

Obrigado por suas respostas rápidas, BMargulies e Bobince. Eu encontrei um módulo Perl, Unicode :: japonês, isso ajudou a fazer o trabalho. Aqui está um script de bash que fiz (com a ajuda de este exemplo) para converter nomes de arquivos no diretório atual de personagens de largura total para meia largura:

#!/bin/bash
for file in *;do
newfile=$(echo $file | perl -MUnicode::Japanese -e'print Unicode::Japanese->new(<>)->z2h->get;')
test "$file" != "$newfile" && mv "$file" "$newfile"
done

Outras dicas

Você precisa (1) normalização do Java 1.6 (java.text.Normalizer), ou (2) unidade de Terapia Intensiva, ou (3 (improvável)) um produto vendido pelo local em que trabalho.

Quais ferramentas você tem disponível? Existem funções de normalização do Unicode em várias linguagens de script, por exemplo, no Python:

for child in os.listdir(u'.'):
    normal= unicodedata.normalize('NFKC', child)
    if normal!=child:
        os.rename(child, normal)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top