Как я устал от бардака в именах файлов и написал свою утилиту для командной строки

Как я устал от бардака в именах файлов и написал свою утилиту для командной строки

Всем привет!
Наверняка каждый из вас сталкивался с ситуацией: скачиваешь архив, материалы для проекта или фотографии, а внутри — настоящий ад. Пробелы в названиях, смесь кириллицы и латиницы, разный регистр, а где-то вообще затесались файлы со сложными расширениями вроде .tar.gz, которые примитивные скрипты на коленке превращают в бессмысленный набор точек.

Для нас - разработчиков открывать GUI это избыточно и кликать по множеству вкладок.

Я искал компактную, кроссплатформенную CLI-утилиту, которая делала бы всё это в одну команду, не ломала сложные расширения и умела работать «из коробки». Ничего идеально подходящего под свои запросы не нашел и решил проблему классическим путем: написал свой велосипед. Легкая и понятная утилита написаная на Python:

Встречайте — File Normalizer (filenorm):

Что умеет filenorm и почему я сделал её именно такой?

Я закладывал в неё принципы простоты, безопасности и предсказуемости. Вот что под капотом:

  • Гибкие стили регистра и разделители: Можно в один клик превратить всё в kebab-case, snake_case или сделать слова с заглавной буквы (title).
  • Умная защита расширений: Программа понимает составные расширения (.tar.gz, .config.json, .d.ts, .min.js) и не портит их, нормализуя только само имя файла.
  • Автоматическая транслитерация: Если в папке есть файлы с кириллицей или другими не-латинскими символами, модуль unidecode аккуратно переведет их в стандартную латиницу.
  • Рекурсивность: Флаг -r позволяет пройтись по всем вложенным папкам за раз.
  • Логирование: Сохраняет отчет о переименовании в текстовый файл с таймстампом (filenorm_log.txt), причем сама себя защищает от случайного переименования этого лога.

Главное — безопасность (чтобы ничего не потерять)

Когда пишешь утилиты для массового изменения файлов, главный страх — запустить скрипт не в той папке и «убить» рабочий проект. Поэтому в filenorm встроены две страховочные опции:

  1. --dry-run (-d) — показывает превью изменений в консоли, ничего реально не переименовывая.
  2. --interactive (-i) — интерактивный режим, где перед переименованием каждого файла программа спрашивает подтверждение ([Y/n]).

Как это выглядит на практике

Установка максимально простая (если у вас Python):

- pip install filenorm

Либо можно скачать готовые скомпилированные бинарники для Windows, Linux и macOS прямо со страницы релизов на GitHub.

Как я устал от бардака в именах файлов и написал свою утилиту для командной строки

Несколько примеров использования:

Просто привести все файлы в текущей директории к стандартному виду (snake_case в нижнем регистре):

- filenorm .

Сделать файлы красивыми (Title Case с дефисами) и запустить рекурсивно для папки с музыкой или проектом:

- filenorm /path/to/dir -r --case title --separator kebab

или же короткий вариант
- filenorm /path/to/dir -r --c title -s kebab

Добавить префикс с датой и суффикс, предварительно посмотрев превью (--dry-run):

- filenorm --prefix "2026-08-" --suffix "-final" --dry-run

Исключить из обработки определенные типы файлов (например, не трогать .mp3 и .txt):

- filenorm . -e .mp3 .txt

Планы и открытый код

Проект полностью открытый (Open Source), код доступен на GitHub. Буду рад фидбеку, баг-репортам и контрибуциям.

Если вы тоже любите автоматизировать рутину и держать терминал в чистоте — буду рад, если утилита пригодится вам в работе.

Делитесь в комментариях: как вам интруент и пишите если есть ошибки, предлагайте изменения и советуйте остальным! Я активный разработчик и сделаю обновление быстро!