Обратите внимание, что вы используете скрипт Perl, называемыйrename распространяемым Debian и производными (Ubuntu, Mint,…). Другие дистрибутивы Linux поставляют совершенно другую и значительно менее полезную команду rename.
y/A-Z/a-z/переводит каждый символ в диапазоне Aчерез Zв соответствующий символ в диапазоне aчерез z, т.е. ASCII прописных букв в соответствующей строчной буквы. Для выполнения обратного перевода используйте y/a-z/A-Z/. Другой способ написать ту же команду , которая rename '$_ = uc($_)' *- ucэто у PPER с функцией азы, а renameкоманда переименовывает файлы , основанная на преобразовании из к $_переменному.
rename '…' *переименовывает только файлы в текущем каталоге, потому что это то, что *соответствует. Точечные файлы (файлы, с которых начинается название .) тоже пропускаются.
Если вы хотите рекурсивно переименовывать файлы в текущем каталоге и в подкаталогах, вы можете использовать findкоманду для рекурсивного обхода текущего каталога. Здесь возникает трудность: если вы позвоните rename, это переименует и каталог, и часть базового имени. Если вы renameобращаетесь к каталогу, прежде чем возвращаться в него ( find -exec rename … {} \;), он findзапутывается, потому что он нашел каталог, но этот каталог больше не существует, когда он пытается спуститься в него. Вы можете обойти это, попросив findпройти по каталогу, прежде чем действовать, но затем вы попытаетесь переименовать foo/barего, FOO/BARно каталог FOOне существует.
Простой способ избежать этой трудности - заставить команду переименования действовать только на часть базового имени пути. Регулярное выражение ([^/]*\Z)соответствует последней части пути, которая не содержит /.
find . -depth -exec rename 's!([^/]*\Z)!uc($1)!e' {} +
Оболочка zsh предоставляет более удобные функции для переименования - даже более загадочно, чем Perl, но более краткая и часто более простая для составления.
Функция zmvпереименовывает файлы на основе шаблонов. Запустите autoload -U zmvодин раз, чтобы активировать его (поместите эту строку в свой .zshrc).
В первом аргументе zmv(шаблон для замены) вы можете использовать мощные шаблоны шаблонов zsh . Во втором аргументе zmv(текст замены) вы можете использовать функции расширения его параметров , включая модификаторы истории .
zmv -w '**/*' '$1$2:u'
Объяснение:
-w - автоматическое присвоение числовых переменных каждому шаблону подстановки
**/*- все файлы в подкаталогах, рекурсивно ( **/соответствует 0, 1 или более уровням подкаталогов)
$1 - первая числовая переменная, здесь совпадающая с частью каталога каждого пути
$2:u- вторая числовая переменная, здесь совпадающая с частью базового имени каждого пути, с :uмодификатором для преобразования значения в верхний регистр
В качестве дополнительного бонуса это учитывает настройки окружающего языка.
Если вы не уверены в zmvнаписанной вами команде, вы можете передать -nопцию, чтобы напечатать, что будет делать команда, и ничего не менять. Проверьте вывод и, если он делает то, что вы хотите, повторно запустите команду без -nфактического действия.
rename 'y/a-z/A-Z/' *вы получите то, что вы хотите. Тщательно, когда вы проверяете это до конца.