Печать
Просмотров: 12997
 

Перекодировать имена файлов из одной кодировки в другую:

Скрипт 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

и скопировать по сети всё обратно.