Перекодировать имена файлов из одной кодировки в другую:
Скрипт 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
и скопировать по сети всё обратно.