Массовые переименования — это та история, которая навсегда живёт во вкладке Stack Overflow. В shell есть полдюжины способов это сделать — mv в for-цикле, rename, prename, mmv, простой find -exec — и у всех есть маленькие выводящие из себя отличия между дистрибутивами.
1. Префикс с датой
$ clai добавь сегодняшнюю дату префиксом ко всем .jpg→ for f in *.jpg; do mv -- "$f" "$(date +%Y-%m-%d)_$f"; done2026-04-27_DSC_0001.jpg2026-04-27_DSC_0002.jpg
-- "$f" делает реальную работу — не даёт mv принять имя файла, начинающееся с дефиса, за флаг. Легко забыть, когда пишете цикл сами.
2. Замена расширения
$ clai замени .jpeg на .jpg для всех файлов в этой папке→ for f in *.jpeg; do mv -- "$f" "${f%.jpeg}.jpg"; done
Чистая shell-подстановка параметров, без внешних утилит. Работает одинаково на Linux и macOS — чего про rename не скажешь.
3. Нормализация пробелов
$ clai замени пробелы на подчёркивания во всех именах файлов здесь→ for f in *\ *; do mv -- "$f" "${f// /_}"; donemy report.pdf -> my_report.pdfproject notes 2026.txt -> project_notes_2026.txt
Glob *\ * совпадает только с файлами, содержащими пробел, — цикл не запустится, если нечего делать. CliAI часто добавляет такие маленькие предохранители.
Когда clai обгоняет Bash-однострочник
Всё, что сложнее этих паттернов — конверсия регистра, regex-захваты, рекурсивные деревья — описывайте словами и пусть модель собирает правильный find -exec rename 's/.../...' '{}' + или mmv. Вы всё равно будете читать результат; inspect-then-run — это страховочная сетка.
См. также
- Поиск больших файлов для половины задачи «выбрать».
- От однострочника к скрипту — когда паттерн заслуживает закоммиченного
.sh.