Как я устал от бардака в именах файлов и написал свою утилиту для командной строки
Всем привет!
Наверняка каждый из вас сталкивался с ситуацией: скачиваешь архив, материалы для проекта или фотографии, а внутри — настоящий ад. Пробелы в названиях, смесь кириллицы и латиницы, разный регистр, а где-то вообще затесались файлы со сложными расширениями вроде .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 встроены две страховочные опции:
- --dry-run (-d) — показывает превью изменений в консоли, ничего реально не переименовывая.
- --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. Буду рад фидбеку, баг-репортам и контрибуциям.
Если вы тоже любите автоматизировать рутину и держать терминал в чистоте — буду рад, если утилита пригодится вам в работе.
Делитесь в комментариях: как вам интруент и пишите если есть ошибки, предлагайте изменения и советуйте остальным! Я активный разработчик и сделаю обновление быстро!