Смена локали - директории и файлы в cp2151

Аватар пользователя WebCode

Здравствуйте.

Решил сменить локаль с cp1251 на utf-8. Но у меня имеется большая коллекция музыки, название директорий и файлов в кодировке cp1251.

Вопрос, как переехать на UTF-8 правильно? Как можно перекодировать всё моё добро?

Заранее спасибо.

С Уважением, WebCode.

Аватар пользователя Meloman

Смена локали - директории и файлы в cp2151

iconv, статья (пусть Вас не пугает ее объем- глаза боятся, руки делают Улыбка ).
И, кстати говоря- такой же вопрос был озвучен ранее ;-)

Аватар пользователя ks

Re: Смена локали - директории и файлы в cp2151

Иногда приходят архивы с именами файлов в cp1251.

Я для таких случаев написал скриптик. Лови:

----------------------------------------------------------------------------------------
#!/bin/sh
# fnconv
########

rename () {
local newname=$(echo "$1"|iconv -c -f "$FROM" -t "$TO")
[ "$1" != "$newname" ] && mv "$1" "$newname"
}

rec_conv () {
local fname
local OldDir=$(pwd)

cd "$1"
for fname in * .[^]* ..[^.]*; do
[ -d "$fname" ] && rec_conv "$fname"
rename "$fname"
done
cd "$OldDir"
}

usage () {
PRG=$(basename "$0")
MSG="$PRG"' [-r] from to file_name [file_name ...]
-r '"$PRG"' recursion
from from charset
to to charset'
if [ $1 -eq 0 ]; then
echo "$MSG"
else
echo "$MSG" >&2
fi
exit $1
}

if [ $# -ge 1 ]; then
case "$1" in
-h|--help) usage 0;;
esac
fi
if [ $# -ge 1 -a "$1" = "-r" ]; then
REC=1
shift
else
REC=0
fi
[ $# -lt 3 ] && usage 1

FROM="$1"
shift
TO="$1"
shift

for fname; do
if [ $REC -eq 1 -a -d "$fname" ]; then
rec_conv "$fname"
fi
rename "$fname"
done
----------------------------------------------------------------------------------------

вызываешь его:

./fnconv [-r] from to file_name [file_name ...]

-r - указываешь этот флаг, если хочешь рекурсивно обойти каталоги
from - кодировка в которой имя файла
to - кодировка в которую нужно перевести имя файла

Аватар пользователя Tigro

Re: Смена локали - директории и файлы в cp2151

Ну а самый простой способ это все скопировать на fat раздел, потом сменить локаль, правильно этот фат примонтировать и скопировать. Это если вдрук ничего не выйдет.

Аватар пользователя WebCode

Re: Смена локали - директории и файлы в cp2151

Спасибо большое. Очень полезный скрипт, спасибо ks.

Tigro, гы, хорошая идея Улыбка. Что-то подобное в голове мелькало, но, видимо, потухло Улыбка. Наверное так и сделаю, скину все нужно на FAT.

Спасибо всем, кто помогу Улыбка.

Аватар пользователя ks

Re: Смена локали - директории и файлы в cp2151

Вот так, пользуешься скриптом, а в нем ошибка, котороя пока не проявилась Улыбка

в rec_conv ()

Цитата:
for fname in * .[^]* ..[^.]*;

надо заменить на

Цитата:
for fname in * .[^.]* ..[^.]*;

Аватар пользователя hazard48

Re: Смена локали - директории и файлы в cp2151

Вопрос дилетанта: если скрутить в tar.gz (или каой нибудь другой архив) а потом раскрутить в файловой системе с новой кодировкой?

Аватар пользователя RedBeard

Смена локали - директории и файлы в cp2151

hazard48 писал(а):
Вопрос дилетанта: если скрутить в tar.gz (или каой нибудь другой архив) а потом раскрутить в файловой системе с новой кодировкой?

Дело не в архиваторе, а именно в копировании между разными файловыми системами с разными кодировками. Тогда получится! А архиватор или нет - все фиолетово!!!

Аватар пользователя RedBeard

Re: Смена локали - директории и файлы в cp2151

Добавление к предыдущему:

А если архив развернуть в другой не только файловой, но и ОПЕРАЦИОННОЙ системе, то что там получится заранее неизвестно. Должно быть в соответствии с правилами имен файлов для этой самой системы.

RSS-материал