LINUX.ORG.RU

массовая смена кодировки файлов


0

1

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

пробовал утилиту convmv. Все нормально,но если в названии файла есть(как я понял), заглавная И, то процесс фейлится.

а с iconv не могу разобраться. пишу ls -l| iconv -f utf-8 -t cp1251 -c

выводит в консоль переделанное название папки, а дальше фиг.

как решить проблему?

enconv - автоматом распознает кодировку. А еще лучше так:

#!/bin/sh
# this script has been written by Eddy 
#
#		rename_translit --- переводит русские имена файлов в транслит
#
# Создан 22-го Май 2006 года в  9:24
#
rmspaces
for Name in `ls -1`
do
    Newname=`echo "$Name"| enconv | sed -e \
    "y/йукенгзхъфывапролдэсмитьбЙУКЕНГЗХЪФЫВАПРОЛДЭСМИТЬБ/jukengzh'fyvaproldesmit'bJUKENGZH'FYVAPROLDESMIT'B/"\
    -e "s/ц/tz/g"	\
    -e "s/ш/sh/g"	\
    -e "s/щ/sch/g"	\
    -e "s/ж/zh/g"	\
    -e "s/ч/ch/g"	\
    -e "s/ю/yu/g"	\
    -e "s/я/ya/g"	\
    -e "s/ё/yo/g"	\
    -e "s/Ё/YO/g"	\
    -e "s/Ц/TZ/g"	\
    -e "s/Ш/SH/g"	\
    -e "s/Щ/SCH/g"	\
    -e "s/Ж/ZH/g"	\
    -e "s/Ч/CH/g"	\
    -e "s/Ю/YU/g"	\
    -e "s/?/_/g"	\
    -e "s/Я/YA/g"`
    if [ "$Name" != "$Newname" ]; then
        mv "$Name" "$Newname"
	echo -e "$Name   ->    $Newname                             \r\c"
    fi
    if [ -d "$Newname" ]; then
	cd "$Newname"
	echo -e "\n\nDiving into $Newname"
	rename_translit
	cd ../
    fi
done

Eddy_Em ☆☆☆☆☆
()

>выводит в консоль переделанное название папки, а дальше фиг.

man convmv - до просветления

Led ★★★☆☆
()
Ответ на: комментарий от Eddy_Em

скрипт он жеж в транслит переводит. а мне надо из кракозябной утф в нормальную cp1251 а про enconv мой apt-get не знает =(

elenhil
() автор топика
Ответ на: комментарий от elenhil

а про enconv мой apt-get не знает

$ e-file enconv
[I] app-i18n/enca
        Available Versions:     1.0 1.13 1.12 1.13-r0 1.12-r0 1.11-r0 1.10-r0 1.9-r1 1.9-r0 1.7 1.5
        Last Installed Ver:     1.13(Sat 27 Feb 2010 09:24:24 PM NOVT)
        Homepage:               http://gitorious.org/enca
        Description:            ENCA detects the character coding of a file and converts it if desired
        Matched Files:          /usr/bin/enconv;
Sion
()

>получился какой то косяк при переносе со старой винды, пошли кракозябы.

Кстати говоря, может и переименовывать-то не нужно, а достаточно поменять опции монтирования?

Sion
()
Ответ на: комментарий от Led

еще раз покурил, загуглил свою ошибку, нашел что разработчики о ней знают и в качестве решения предлагают ручное переименование файлов. так что или у вас бубен круче моего, или ткните пальцем в мою ошибку, почему convmv -f utf-8 -t cp1251 -r --notest path может выдавать ошибку cp1251 doesn't cover all needed characters for:

elenhil
() автор топика
Ответ на: комментарий от elenhil

скрипт он жеж в транслит переводит.

for Name in `ls -1` 
do 
    Newname=`echo "$Name"| enconv
    if [ "$Name" != "$Newname" ]; then 
        mv "$Name" "$Newname" 
        echo -e "$Name   ->    $Newname                             \r\c" 
    fi 
    if [ -d "$Newname" ]; then 
   cd "$Newname" 
   echo -e "\n\nDiving into $Newname" 
   rename_
   cd ../ 
    fi 
done

Просто убираем sed :)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от elenhil

>почему convmv -f utf-8 -t cp1251 -r --notest path может выдавать ошибку cp1251 doesn't cover all needed characters for:

Потому что в cp1251 нет возможности представить все символы из юникода, это должно быть вполне очевидно. Если попробовать сконвертировать в cp1251 что-нибудь наподобие 「文字化け」、 то ошибка будет именно такой.

Sion
()
Ответ на: комментарий от elenhil

>почему convmv -f utf-8 -t cp1251 -r --notest path может выдавать ошибку cp1251 doesn't cover all needed characters for

про --notest ты раньше не писал

Led ★★★☆☆
()
Ответ на: комментарий от elenhil

>почему ... может выдавать ошибку cp1251 doesn't cover all needed characters for:

Как раз потому, что «cp1251 doesn't cover all needed characters for:» (с) К.О.

Led ★★★☆☆
()

Еще никто не сказал, что cp1251 не нужно? Ведь utf-8 наше всио.

Зачем нужно это делать?

Как ты хочешь слона в запор засунуть? Он же не влезет.

Zodd ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.