Конвертировать двухбайтовые числа и пробелы в именах файлов в 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)