Зауважте, що ви використовуєте скрипт 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/' *ви отримаєте те, що хочете. Обережно, де ви це протестуєте.