Транслитерация имён файлов и имён каталогов в linux

Transliteracija imjon fajlov i imjon katalogov v linux

Справка—> Транслитерация — точная передача знаков одной письменности знаками другой письменности.

Транслитерация имён файлов в текущем каталоге и его подкаталогах

#!/bin/bash
# Перекодирует рекурсивно в текущем каталоге имена
# файлов в транслит.
 
shopt -s nullglob
IFS=$'\n'
for NAME in `find . -type f` ; do
  BNAME=`basename "$NAME"`
  BFOLDER=${NAME%/*}
  TRS=`echo $BNAME | sed "y/абвгдезийклмнопрстуфхцы/abvgdezijklmnoprstufxcy/"`
  TRS=`echo $TRS  | sed "y/АБВГДЕЗИЙКЛМНОПРСТУФХЦЫ/ABVGDEZIJKLMNOPRSTUFXCY/"`
  TRS=${TRS//ч/ch};
  TRS=${TRS//Ч/CH} TRS=${TRS//ш/sh};
  TRS=${TRS//Ш/SH} TRS=${TRS//ё/jo};
  TRS=${TRS//Ё/JO} TRS=${TRS//ж/zh};
  TRS=${TRS//Ж/ZH} TRS=${TRS//щ/sh};
  TRS=${TRS//Щ/SH} TRS=${TRS//э/je};
  TRS=${TRS//Э/JE} TRS=${TRS//ю/ju};
  TRS=${TRS//Ю/JU} TRS=${TRS//я/ja};
  TRS=${TRS//Я/JA} TRS=${TRS//ъ/};
  TRS=${TRS//ъ/} TRS=${TRS//ь/};
  TRS=${TRS//Ь/}
 if [[ "$TRS" != "$BNAME" ]]; then
  NEWTRS=`echo "$BFOLDER"/"$TRS"`
#  echo "moving $NAME to $NEWTRS"
    mv -v "$NAME" "$NEWTRS"
fi
done

Транслитерация имён каталогов в текущем каталоге и его подкаталогах

#!/bin/bash
# Перекодирует рекурсивно в текущем каталоге имена
# каталогов в транслит.
 
shopt -s nullglob
IFS=$'\n'
while true; do
    COUNT=0
    for NAME in `find . -type d` ; do
        BNAME=`basename "$NAME"`
        BFOLDER=${NAME%/*}
        TRS=`echo $BNAME | sed "y/абвгдезийклмнопрстуфхцы/abvgdezijklmnoprstufxcy/"`
        TRS=`echo $TRS  | sed "y/АБВГДЕЗИЙКЛМНОПРСТУФХЦЫ/ABVGDEZIJKLMNOPRSTUFXCY/"`
        TRS=${TRS//ч/ch};
        TRS=${TRS//Ч/CH} TRS=${TRS//ш/sh};
        TRS=${TRS//Ш/SH} TRS=${TRS//ё/jo};
        TRS=${TRS//Ё/JO} TRS=${TRS//ж/zh};
        TRS=${TRS//Ж/ZH} TRS=${TRS//щ/sh};
        TRS=${TRS//Щ/SH} TRS=${TRS//э/je};
        TRS=${TRS//Э/JE} TRS=${TRS//ю/ju};
        TRS=${TRS//Ю/JU} TRS=${TRS//я/ja};
        TRS=${TRS//Я/JA} TRS=${TRS//ъ/};
        TRS=${TRS//ъ/} TRS=${TRS//ь/};
        TRS=${TRS//Ь/}
        if [[ "$TRS" != "$BNAME" ]]; then
            NEWTRS=`echo "$BFOLDER"/"$TRS"`
#            echo "moving $NAME to $NEWTRS"
            COUNT=`expr $COUNT + 1`
            mv -v "$NAME" "$NEWTRS"
            break
        fi
    done
    if [ $COUNT -eq 0 ]; then
        echo "Everything seems to be done"
        exit
    fi
done



Комментариев 1 к “Транслитерация имён файлов и имён каталогов в linux”

  1. Матвей:

    Спасибо большое! Скажите, что добавить, чтобы еще заменить пробелы в именах папок и файлов на знак подчеркивания?

Оставить комментарий