LINUX.ORG.RU

Рекурсивный транскод директории из koi8 в cp1251


0

0

Доброго всем времени...

Директория с двойным уровнем вложенности доверху заполненная файлами с именами по следующему примерному шаблону

./??/????/Василий Пупкин Иванович BD42C02987C832ADEA3E3BCB66187F34E029BE65 до ??.??.????.cer

Переменными является всё кроме ".cer"

Имена файлов в koi8-r кодировке. Соответственно цель стоящая - переделать всё в cp-1251 c сохранением первоначального смысла.

Единственная мысль посетившая - find * ./ | grep .cer > list.koi8; iconv -f koi8-r -t cp1251 list.koi8 > list.cp1251; после чего соответственно переименовывать файлы из директории на их аналоги из list.cp1251.

Возможно знает кто более простой способ, какую утилиту что сможет транскодить имена а не содержиния файлов ?

anonymous

#!/bin/bash
 
CODE_FROM="koi8-r"
recursive=0
scan_only=0
 
function parse_cmd_line()
{
    prev_arg=""
    need_next=0
    for i in "$@"
    do
	if [ $need_next -eq 0 ]; then
	    case $i in
	    "-f")
		prev_arg="-f"
    		need_next=1
	    ;;
	    "-r")
		recursive=1
	    ;;
	    "-s")
		scan_only=1
	    ;;
	    esac
	else
	    case $prev_arg in
	    "-f")
		CODE_FROM=`echo $i | tr '[:lower:]' '[:upper:]'`
	    ;;
	    esac
	    prev_arg=""
	    need_next=0
	fi
    done
}
 
function recode_file()
{
 
    old_name="$@"
    new_name=`echo $@ | iconv -f $CODE_FROM`
    stat1=$?
    mid_name=`echo $@ | iconv -f cp1251 2>/dev/null`
    stat2=$?
 
    if [ x"$old_name" != x"$new_name" -a $stat1 -eq 0 -a x"$mid_name" != x"$old_name" ]; then
	if [ $scan_only -eq 0 ]; then
	    echo "Recode: $old_name -> $new_name"
	    mv "$old_name" "$new_name"
	else
	    echo `pwd`"$@"
	fi
    fi
}
 
parse_cmd_line $@
 
oldIFS=$IFS
IFS=$'n'
files=`ls -1 --color=none`
for i in $files
do
    if [ -d "$i" ]; then
	if [ $recursive -eq 1 ]; then
	    name=`basename $0`
	    if [ `dirname $0` == "." ]; then
		prefix=`pwd`
	    else
		prefix=`dirname $0`
	    fi
	    cd "$i"
 
	    $prefix/$name "$@"
 
	    cd ..
	fi
    fi
 
    recode_file "$i"
done

x3al ★★★★★
()

банальный скрипт на sh с cp+iconv+(awk||sed) спасут отца русской демократии

anonymous
()

В FAQ, сукины дети! (с) jackill

convmv

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