Перекодировать имена файлов из одной кодировки в другую:
Скрипт iconv_currentCP:
#!/bin/bash
#Конвертация имён файлов и каталогов из заданной кодировки в текущую
if [ "$1" = ""]
then echo "Исходная кодировка не указана! \
Пожалуйста укажите кодировку, например cp1251 или koi8-r"; exit 1
fi
PWD=$(pwd) #Запоминаем текущий каталог
#Ищем все вложенные каталоги в текущем и отдаём их переменной цикла и \
временно заменяем пробелы в названиях на для исключения проблем с \
восприятием одного имени файла как нескольких.
for i in $(find $PWD -type d -depth | sed 's/ /\\/g')
do
#Возвращяем пробелы в имена файлов и каталогов и запоминаем в переменной dest
dest=$(echo "$i" | sed 's/\\/ /g')
cd "$dest" #Переходим в каталог
#Конвертируем имена содержимого катаога из заданной кодировки в текущую
for n in *
do
conv=$(echo "$n" | iconv -c -f "$1")
mv "$n" "$conv"
done
cd $PWD
done
Перекодировать имена файлов из одной кодировки в другую:
Скрипт iconv_UTF2koi8-r:
#!/bin/sh
find /space/place * -exec iconv -f UTF-8 -t KOI8-R {} \;
Распутывание кодировок (на лету). Часть 1
Монтирование через sshfs с перекодировкой из командной строки:sshfs 10.0.3.200:/space /mnt/space -o \ allow_other,modules=iconv,from_code=KOI8-R,to_code=UTF8
Монтирование через sshfs с перекодировкой строчкой в /etc/fstab:
sshfs#fuse@10.0.3.200:/space /mnt/space fuse \ user,allow_other,modules=iconv,from_code=KOI8-R,to_code=UTF8 0 0
fuse в строчке 'sshfs#fuse@10.0.1.200' - пользователь на другой стороне, но при таком раскладе спрашивает пароль пользователя. Если необходимо настраивать беспарольный автомат - надо генерить rsa или dsa ключи.
Распутывание кодировок (на лету). Часть 2
Как-то переезжал с ALT Linux 4.0 с графическим столом xfce на ALT Linux 5.0.2 с графическим столом LXDE. Сразу отмечу, что первом релизе locale была в koi8-r, а во второй в UTF8. При переезде получилось так, что смонтировал на скорую руку по samb-е сетевой каталог с дугой linux-машины (ALT Linux 4.0 с графическим столом xfce) и скопировал туда пользовательские каталоги.
После установки новой
версии системы захотел скопировать данные пользователя обратно, но оказалось,
что многие файлы и каталоги пользователя были в русской кодировке и при
монтировании по samb-е на ALT Linux 5.0.2 оказались не читаемыми, также не
читаемыми оказались файлы и каталоги на той linux-машине (ALT Linux 4.0) на
которую копировались данные через samb-у. Возник вопрос -
"Как всё вернуть обратно?". Так как монтирование со старой системы производилось
наспех и без указания кодировок, то необходимо было выяснить какую кодировку
samba использует по умолчанию. Этой кодировкой оказалась кодировка cp850.
Ну а далее дело техники: можно либо дать правильную команду монтирования
с перекодировкой из командной строки, либо сделать запись в /etc/fstab:
//10.0.4.250/userdata /mnt/data cifs \ rw,_netdev,user,username=user,password=user,codepage=cp850,iocharset=koi8-r 0 0
и скопировать по сети всё обратно.
