Как переименовать имена файлов в другую кодировку?

У меня есть 3 типа file name кодировки на reiserfs Установлен жесткий диск: CP1251, KOI-8, UTF-8 и ASCII. Мне действительно нужно конвертировать все кодировки в UTF-8, рекурсивно. Есть ли какая-либо утилита, которая обнаружит исходную кодировку и преобразует ее в UTF-8, или мне нужно написать скрипт на Python?

2 ответа

Используйте convmv, инструмент CLI, который преобразует имя файла между различными кодировками. Преобразовать из (-f) эти дополнения к (-t) UTF-8 делает следующее:

convmv -f CP1251 -t UTF-8 inputfile
convmv -f KOI-8  -t UTF-8 inputfile
convmv -f ASCII  -t UTF-8 inputfile

Кроме того, если вы хотите преобразовать содержимое файла, используйте iconvинструмент CLI для преобразования содержимого файла в различные кодировки. Преобразовать из (-f) эти дополнения к (-t) UTF-8 делает следующее:

iconv -f CP1251 -t UTF-8 inputfile > outputfile
iconv -f KOI-8  -t UTF-8 inputfile > outputfile
iconv -f ASCII  -t UTF-8 inputfile > outputfile

Нету. Одним из больших недостатков старой системы кодовых страниц является то, что нет способа определить, какая из них используется; Вы должны просто знать, что априори. Если вы знаете, какие файлы используют какую кодировку, вы можете преобразовать имена, используя что-то вроде:

mv somefile `echo somefile | iconv -f CP1251 -t UTF-8`

То же решение с iconv как @psusi sugeses, но с циклом и while-картой:

Также oneline shell sh сценарий:

for f in /path/*.txt; do mv $f `echo $f | iconv -f 866 -t UTF-8`; done

При чтении карты while из конвейера:

echo * | for f in `read f&&echo $f`; do mv $f `echo $f | iconv -f 866 -t UTF-8`; done
Другие вопросы по тегам