Массовое переименование файлов из cp1251 в utf-8

Массовое переименование файлов из cp1251 в utf-8

Program to convert file names from cp1251 to utf-8 encoding

Массовое переименование файлов из cp1251 в utf-8
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#! /bin/bash

usage="\n Program to convert file names from cp1251 to utf-8 encoding\n
  ...or just another fucking useless untitled batch file renamer\n\n
  Arguments:\n
  \t-d, --dir \tdirectory containing files to rename\n
  \t-h, --help \tdisplay this help and exit\n
  \t-r, --reverse \tconvert names from utf-8 to cp1251\n
  \t-v, --version \toutput version information and exit\n
  \n
  Examples:\n
  \tFind all files with cp1251 characters and move to new directory:\n
  \t$(basename "$0") -d '/media/Music/Бутырка/'\n
  \n
  \tMultiple renaming:\n
  \t$(basename "$0") '/media/Files/Ãîâíî.xlsx' '/media/Files/Ññàíèíà.mp3' \n"

version="\n Version 0.0.1 (January 03, 2019)\n
  Code by Ethicist: https://vk.com/ethicist \n
  \n        
  LICENSE\n
  \n
  This software is in the public domain. Where that dedication is not\n
  recognized, you are granted a perpetual, irrevocable license to copy,\n
  distribute, and modify this file as you see fit.\n"

charset_utf8='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя'
charset_cp1251='ÀÁÂÃÄÅšÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåžæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'

param_input_dir=0
param_reversed=0
param_multiple=0

if [ $# -lt 1 ]
then
  echo -e $usage
  exit 0
fi

for args in "$@"
do
  case $args in
    -d*|--dir*)
      let "param_input_dir += 1"
       input_dir="$2"
      shift
    ;;
    -r|--reverse)
      let "param_reversed += 1"
      shift
    ;;
    -h|--help)
      echo -e $usage
      exit
    ;;
    -v|--version)
      echo -e $version
      exit
    ;;
    *)
      let "param_multiple += 1"
    ;;
  esac
done

if [ "$param_reversed" -eq 1 ]
then
  regexp="s/.*/&/;y|$charset_utf8|$charset_cp1251|"
else
  regexp="s/.*/&/;y|$charset_cp1251|$charset_utf8|"
fi

if [ "$param_input_dir" -eq 1 ]
then
  cd $input_dir
  for filename in *
  do
    echo Renaming $files
    mv "$filename" "`echo $filename | sed -e $regexp`"
  done
else
  for filename in "$@"
  do
    echo -e "\n Renaming $filename"
    mv "$filename" "`echo $filename | sed -e $regexp`"
  done
fi
echo

exit 0
Поиск по сайту

Результаты поиска

Начните вводить запрос. Можно искать по названию, описанию, тексту и тегам.