Как переименовать имена файлов в другую кодировку?
У меня есть 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