Категории

пятница, 9 декабря 2011 г.

Рекурсивная перекодировка имен файлов и каталогов

Бывает так, что на диске по каким-то причинам файлы и каталоги хранятся не в той кодировке, в которой хотелось бы, sh скрипт, приведенный ниже решает эту проблему.
Чтобы определить из какой кодировки и в какую кодировать можно воспользоваться онлайн сервисом http://www.online-decoder.com/ru или ему подобными.

#!/bin/sh

# Чтобы определить из какой кодировки в какую 
#  кодировать можно воспользоваться онлайн подобным
#  сервисом http://www.online-decoder.com/ru

DIR_PATH='/mnt/volume1/'  # Каталог для обработки
F_CODE='cp1251'    # В какой кодировке хранятся имена файлов
T_CODE='koi8-r'    # В какую кодировку перекодировать имена файлов

# ищем сперва самые "глубокие Директории"
find -d $DIR_PATH -type d | while read dir; do
  if [ -e "$dir" ]; then    # Если такая директория существует, то...
    D_OUT="$(echo "$dir" | iconv -f $F_CODE -t $T_CODE)"
# ВАЖНО Сперва получаем список файлов в самой глубокой директории
#  (ВАЖНО, чтобы она была самой "глубокой")
    ls "$dir" | while read file; do
      F_OUT="$(echo "$file" | iconv -f $F_CODE -t $T_CODE)"
      # Если имена файлов не равны, то переименовываем их
      if [ "$dir" != "$D_OUT" ]; then
        echo "$dir/$file" '->' "$dir/$F_OUT";
        mv "$dir/$file" "$dir/$F_OUT";
      fi
    done
# Если имена каталогов НЕ равны, то можем со
#  спокойной совестью перекодировать каталоги
    if [ "$dir" != "$D_OUT" ]; then
      echo "$dir" '->' "$D_OUT";
      mv "$dir" "$D_OUT";
      echo '------------------------'
    fi
  fi
done

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

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