Автор Гілка: Мультизаміна літер в іменах директорій  (Прочитано 2448 раз)

Відсутній v.2.1

  • Письменник
  • *****
  • дописів: 639
  • Карма: +0/-0
Чи є якась команда, яка б могла робити заміну літер в іменах директорій?
Наприклад:

Yu = Ю
zh = ж


Є збережений сайт електронної бібіліотеки. Теки, які означають імена авторів, написані латиницею, хочу поміняти їх на українські літери.
« Змінено: 2009-05-13 23:18:11 від vitre »

Відсутній v.2.1

  • Письменник
  • *****
  • дописів: 639
  • Карма: +0/-0
Щось схоже

rename 'y/A-Z/a-z/' *

Відсутній piktor

  • Видавець
  • *******
  • дописів: 3396
  • Карма: +0/-0
Не так давно, з навчальною метою, писав скрипта на Пітоні, що переводить трансліт у звичайний текст за правилами.
#!/usr/bin/env python
f1 = open("in.txt", "r")
f2 = open("out.txt", "w")
f3 = open("table.txt", "r")
#Filing dictionary from file
d={" ":" "}
for line in f3.readlines():
      lat = line[0]
      cyr = unicode(line.split('=')[1].split()[0], "utf8")
      d.update({cyr: lat})
print d
#Converting
char = u' '
while char:
      char = unicode(f1.read(), "utf8")
      print char,
      try:
            f2.write(d(char))
      except:#If symbol is not table (dot, comma, etc) - just copy it.
            f2.write(char.encode("utf8"))
f1.close()
f2.close()
f3.close()
Якщо зацікавить - можна спробувати переробити, щоб робив вами бажане.
Всим, хто тоне й не знає,
За що вхопитись,
Хто вже з останніх
Вибився сил:
Попереджаю - я не колода,
Попереджаю - я крокодил.

Відсутній v.2.1

  • Письменник
  • *****
  • дописів: 639
  • Карма: +0/-0
Якби ви переробили цей скрипт, то я був би дуже вдячний. Бо я людина далека від програмування.

Відсутній piktor

  • Видавець
  • *******
  • дописів: 3396
  • Карма: +0/-0
Вам терміново? Бо я в найближчі дві доби часу не маю. Можете зловити Сергія Лисовенка - він ще може. Мій скрипт перекодовує текст із файлу, тому треба переробити ту частину, яка отримує текст - щоб брала його із назв.
Всим, хто тоне й не знає,
За що вхопитись,
Хто вже з останніх
Вибився сил:
Попереджаю - я не колода,
Попереджаю - я крокодил.

Михайло Даниленко

  • Гість
#! /usr/bin/perl

use strict;
use warnings;

my %code_table = (
      'sh'  => 'ш',
      'sch' => 'щ',
      'a'   => 'а',
      'b'   => 'б',
);

foreach my $name ( @ARGV ) {
      my $newname = $name;

      foreach my $code ( reverse sort { length $a <=> length $b } keys %code_table ) {
            $newname =~ s/$code/$code_table{$code}/gi;
      }

      if ( $newname ne $name ) {
            print "$name -> $newname\n";
            rename $name, $newname
                  or print "Error: $!\n";
      }
}

# The End

Михайло Даниленко

  • Гість
Якщо треба збереження регістру - тоді
...
my %code_table = (
      'sh'  => 'ш',
      'Sh'  => 'Ш',
      'sch' => 'щ',
      'Sch' => 'Щ',
...
            $newname =~ s/$code/$code_table{$code}/g;
...

Відсутній v.2.1

  • Письменник
  • *****
  • дописів: 639
  • Карма: +0/-0
Owl, не терміново, поки можна й з англійськими використовувати.

Михайле Даниленко, дякую. Спробую таке зробити. Є питання, бо пітонський скрипт використовуватиму вперше.
запускати

cd /directiry
pyton
ввести скрипт

в такому разі перейменує тільки директорію, чи всі файли?

Михайло Даниленко

  • Гість
Ні, мій скрипт - перловський.
Просто збережіть його як текстовий файл, наприклад cvt.pl, відредагуйте %code_table (додайте пари транслітерація - заміна), надайте йому дозволи на виконання ( наприклад, « chmod +x cvt.pl » та запустіть « ./cvt.pl Dejaka_dyrektoriya Insha\ Dyrectoriya\ iz\ probilamy\ u\ nazvi ».

Михайло Даниленко

  • Гість
Якщо треба рекурсивне перейменування - скористайтеся утилітою find
$ find directory_to_process_1 directory_to_process_2 directory_to_process_etc -depth -execdir ./cvt.pl \{\} +
Проте я не маю зараз часу це протестувати - як прийду додому перевірю.

Михайло Даниленко

  • Гість
Ой,
$ find directory_to_process_1 directory_to_process_2 directory_to_process_etc -depth -execdir "$PWD/cvt.pl" \{\} +

Відсутній red@cat

  • Дописувач
  • **
  • дописів: 61
  • Карма: +0/-0
У мене є shell-скрипт, який призначений для перейменовування файлів та директорій в різних комбінаціях (в тому числі рекурсивно). Щоправда, я мав на меті змінювати не комбінації літер в назвах, а окремі символи, викидаючи, зокрема, повторні проділи, апострофи та деякі інші "незручні" символи. Крім того, користувач може задати скрипту свої варіанти заміни символів - для цього скрипт має свій конфігураційний файл. Але якщо є потреба також в обробці комбінацій літер і час терпить, то можу трохи дописати скрипт на вихідних. Скрипт можна взяти тут:
http://gettyfile.com.ua/301693/
P.S. Висловлюю мої щирі співчуття тим, хто добре знає англійську. Решті приношу свої вибачення.

romi

  • Гість
P.S. Висловлюю мої щирі співчуття тим, хто добре знає англійську
Off-topic:
Цитата
Ой, Шура я вас умоляю, вместо того шобы учиться плавать, эти идиоты учили английский и шо оно им помогло когда тонул их "Титаник"?
« Змінено: 2009-05-14 21:41:40 від romi »

Відсутній Campana

  • Письменник
  • *****
  • дописів: 795
  • Карма: +0/-0
  • Проходив мимо
Ніби все це повинна уміти кдешна KRename.