Pregunta

Dado un directorio de nombres de archivo que consta de dos bytes / números y espacios (junto con algunos números de ancho medio y guiones) de ancho completo, ¿cómo puedo convertir todos los números y espacios para caracteres de un byte?

Por ejemplo, este nombre de archivo consiste de un número de doble byte, seguido por un espacio de doble byte, seguido por algunos caracteres de un solo byte:

2 2_3.ext

y me gustaría cambiar a todos de un solo byte, así:

2 2_3.ext

He intentado convmv convertir de UTF-8 a ASCII, pero el siguiente aparece un mensaje para todos los archivos:

"ascii no cubre todos los caracteres necesarios para: nombre "

¿Fue útil?

Solución 3

Gracias por sus respuestas rápidas, bmargulies y bobince. Me encontré con un módulo de Perl, Unicode :: japonesa , que ayudó a hacer el trabajo. Aquí es un script bash que hice (con la ayuda de este ejemplo ) para convertir los nombres de archivo en el directorio actual de ancho completo a los caracteres de ancho medio:

#!/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

Otros consejos

Se necesita ya sea (1) la normalización de Java 1.6 (java.text.Normalizer), o (2) UCI , o (3 (poco probable)) un producto vendido por el trabajo lugar I.

¿Qué herramientas que tiene disponible? Hay funciones de normalización Unicode en varios lenguajes de script, por ejemplo en Python:

for child in os.listdir(u'.'):
    normal= unicodedata.normalize('NFKC', child)
    if normal!=child:
        os.rename(child, normal)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top