Конвертировать двухбайтовые числа и пробелы в именах файлов в ASCII

Учитывая каталог имен файлов, состоящий из двухбайтовых / полных чисел и пробелов (вместе с некоторыми числами полуширины и подчеркиванием), как я могу преобразовать все числа и пробелы в однобайтовые символы?

Например, это имя файла состоит из двухбайтового числа, за которым следует двухбайтовый пробел, за которым следуют некоторые однобайтовые символы:

2 2_3.ext

и я хотел бы изменить его на все однобайтовые, например, так:

2 2_3.ext

Я пробовал convmv конвертировать из utf8 в ascii, но для всех файлов появляется следующее сообщение:

msgstr "ascii не покрывает все необходимые символы для: имени файла"

3 ответа

Решение

Спасибо за ваши быстрые ответы, bmargulies и bobince. Я нашел модуль Perl, Unicode:: Japanese, который помог сделать работу. Вот скрипт bash, который я сделал (с помощью этого примера) для преобразования имен файлов в текущем каталоге из символов полной ширины в символы полуширины:

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

Вам нужна либо (1) нормализация из Java 1.6 (java.text.Normalizer) или (2) ICU, или (3 (маловероятно)) продукта, проданного по месту работы.

Какие инструменты у вас есть в наличии? Есть функции нормализации Unicode в нескольких языках сценариев, например в Python:

for child in os.listdir(u'.'):
    normal= unicodedata.normalize('NFKC', child)
    if normal!=child:
        os.rename(child, normal)
Другие вопросы по тегам