Переименовать файлы с нелатинскими символами

Вопрос или проблема

У меня Kubuntu 22.04. Есть ли программа, скрипт и т.д. в *buntu, которые могут переименовать все файлы в папке с нелатинскими символами в их латинский эквивалент? Например, у меня есть папка, содержащая файлы с такими именами:

Andúril
Dúnedain
Éomer

и мне нужно переименовать их в:

Anduril
Dunedain
Eomer

Сразу на ум приходит, что модуль Perl Text::Unidecode может это сделать (технически он попытается транслитерировать символы Unicode вне диапазона ASCII в подходящую замену ASCII):

Представление почти всегда является попыткой транслитерации — т.е. передачи, римскими буквами, произношения, выраженного текстом в какой-то другой письменной системе.

sudo apt install libtext-unidecode-perl

Самое удобное, что вы можете объединить это с утилитой rename, основанной на Perl, и сделать следующее:

rename -u utf8 -n 'BEGIN {use Text::Unidecode}; unidecode($_)' *

Это выполнит “сухой” запуск (имя файла не будет изменено, но результат замены для каждого файла будет отображаться); если вас устраивает результат, уберите флаг -n:

rename -u utf8 'BEGIN {use Text::Unidecode}; unidecode($_)' *

Опция -u важна, так как она указывает rename / Perl интерпретировать имена файлов как строки, закодированные в UTF-8.

% ls -la
totale 36
drwxrwxr-x  2 user user 32768 окт 15 19:53 .
drwxr-xr-x 42 user user  4096 окт 15 20:01 ..
-rw-rw-r--  1 user user     0 окт 15 19:53 Andúril
-rw-rw-r--  1 user user     0 окт 15 19:53 Dúnedain
-rw-rw-r--  1 user user     0 окт 15 19:53 Éomer
% rename -u utf8 'BEGIN {use Text::Unidecode}; unidecode($_)' *
% ls -la
totale 36
drwxrwxr-x  2 user user 32768 окт 15 20:01 .
drwxr-xr-x 42 user user  4096 окт 15 20:01 ..
-rw-rw-r--  1 user user     0 окт 15 19:53 Anduril
-rw-rw-r--  1 user user     0 окт 15 19:53 Dunedain
-rw-rw-r--  1 user user     0 окт 15 19:53 Eomer

.

Ответ или решение

Переименование файлов с нелатинскими символами в Unix-подобных системах

Введение

В операционных системах на базе Linux, таких как Kubuntu 22.04, работа с файлами, имеющими нелатинские символы, может представлять определенные сложности. Если у вас есть папка с файлами, содержащими такие символы, как в приведенном ниже примере:

  • Andúril
  • Dúnedain
  • Éomer

и вы хотите переименовать их в версии, содержащие только латинские символы:

  • Anduril
  • Dunedain
  • Eomer

Существует несколько подходов к решению этой задачи, один из которых основан на использовании модуля Perl Text::Unidecode и утилиты rename.

Установка необходимых инструментов

Для начала вам необходимо установить модуль Text::Unidecode, который выполняет транслитерацию Символов Unicode в соответствующие им символы ASCII. Для этого выполните следующую команду в терминале:

sudo apt install libtext-unidecode-perl

Использование rename

После установки необходимого модуля, вы можете использовать Perl-базированную утилиту rename для переименования файлов. Убедитесь, что вы находитесь в каталоге с файлами, которые нужно переименовать.

Пошаговые инструкции

  1. Проверка имен файлов: Пожалуйста, выполните команду ls -la, чтобы убедиться, что файлы находятся в папке:

    ls -la
  2. Тестовый запуск: Проведитесь тестовый запуск (dry-run), чтобы убедиться, что изменения соответствуют вашим ожиданиям, без фактического их применения. Используйте следующую команду:

    rename -u utf8 -n 'BEGIN {use Text::Unidecode}; unidecode($_)' *

    Параметр -n гарантирует, что ни одно имя файла не будет изменено, и вы сможете увидеть, как каждый файл будет выглядеть после переименования.

  3. Производственное переименование: Если вы довольны исправлениями, вы можете убрать параметр -n, чтобы выполнить фактическое переименование:

    rename -u utf8 'BEGIN {use Text::Unidecode}; unidecode($_)' *

Результат

После выполнения команды вы должны увидеть, что файлы были переименованы. Например:

ls -la
# Результат
totale 36
drwxrwxr-x  2 user user 32768 ott 15 19:53 .
drwxr-xr-x 42 user user  4096 ott 15 20:01 ..
-rw-rw-r--  1 user user     0 ott 15 19:53 Anduril
-rw-rw-r--  1 user user     0 ott 15 19:53 Dunedain
-rw-rw-r--  1 user user     0 ott 15 19:53 Eomer

Заключение

Используя указанные инструменты и команды, вы сможете эффективно переименовать файлы с нелатинскими символами в Kubuntu 22.04. Этот метод является надежным и может быть адаптирован для других сценариев, включая изменения в больших массивах файлов. Обязательно всегда выполняйте тестовый запуск перед внесением окончательных изменений, чтобы избежать потери данных.

Оцените материал
Добавить комментарий

Капча загружается...