четверг, 4 сентября 2008 г.

Транслитерация

Как-то появилась необходимость перевести достаточно большое количество имен файлов с русского в транслит, а также несколько текстовых файлов. В связи с этим был написан следующий скрипт:
translit.sh
Код:
#!/bin/bash

#Author: Desidis
#Created at: Thu Sep 4 17:37:26 EEST 2008

OPT=$1
file_name=$2
char=`enca -i "$file_name"`
command="`basename \"$0\"`"
#Functions
display_usage() {
cat << EOF
Usage: $command [--all_in_dir] находясь в нужной папке
$command [--text_in_file] имя файла
$command [--single_file] имя файла
Use "$command --help" для более полной помощи.

EOF
}
text_in_file() {
f_f=`echo "$file_name" | awk -F. '{print NF-1}'`
l_f=`echo "$file_name" | awk -F. '{print NF}'`
begin_file_name=`echo "$file_name" | cut -d. -f 1-$f_f`
end_file_name=`echo "$file_name" | cut -d. -f $l_f`
f_f_n=$begin_file_name.translit.$end_file_name
DIRECTORY=/tmp/translit
if [ -d $DIRECTORY ]
then :
else
mkdir $DIRECTORY > /dev/null 2>&1
if [ $? != 0 ];
then
echo "Немогу создать временную директорию" >&2
exit 1
else :
fi
fi
cat "$file_name" | iconv -f "$char" -t koi8-r | catdoc -d us-ascii -s koi8-r > $DIRECTORY/tmp
mv $DIRECTORY/tmp "$f_f_n"
rm -r $DIRECTORY
echo "Транслитерация '"$file_name"' завершена"
}
all_in_dir () {
for i in *
do
name=`echo "$i" | iconv -f utf8 -t koi8-r | catdoc -d us-ascii -s koi8-r`
mv "$i" "$name"
echo "Переименовано "$i" в "$name""
done
exit 0
}
single_file () {
name=`echo "$file_name" | iconv -f utf8 -t koi8-r | catdoc -d us-ascii -s koi8-r`
mv "$file_name" "$name"
echo "Переименовано "$file_name" в "$name""
}
display_help () {
cat << EOF

Options:
--all_in_dir Транслитерирует имена всех файлов в текущем каталоге
--single_file Транслитерирует имя указанного файла
--text_in_file Производит транслитерацию кирилицы в указанном файле
EOF
}
case $OPT in
--all_in_dir) all_in_dir
;;
--text_in_file) text_in_file
;;
--single_file) single_file
;;
--help) display_help
;;
*) display_usage
;;
esac

Комментариев нет: