Я renameвесь час користуюся . Це досить просто, але, сподіваємось, ви знаєте базовий регулярний вираз:
rename "s/SEARCH/REPLACE/g" *
Це замінить рядок SEARCHз REPLACEв кожному файлі (тобто *). В /gозначає глобальний, так що якщо у вас була SEARCH_SEARCH.jpg, вона буде перейменована REPLACE_REPLACE.jpg. Якби у вас цього не було /g, він би здійснив заміну лише один раз, і таким чином тепер був названий REPLACE_SEARCH.jpg. Якщо ви хочете без регістру, додайте /i(це було б, /giабо /igв кінці).
За допомогою регулярних виразів ви можете зробити набагато більше.
Зауважте, що це renameкоманда prename(aka Perl rename), яка підтримує повні регулярні вирази Perl. Є ще одна, renameяка використовує шаблони, і не настільки потужна. prenameраніше встановлювався за замовчуванням на Ubuntu (разом з Perl), але тепер, можливо, доведеться зробити:
sudo apt install rename
Ось кілька прикладів:
Префікс
Додати :
rename 's/^/MyPrefix_/' *
document.pdf перейменований на MyPrefix_document.pdf
Видалити :
Також ви можете видалити небажані рядки. Скажімо, у вас було 20 MP3-файлів з назвою типу, CD RIP 01 Song.mp3і ви хотіли видалити частину "CD RIP", і ви хотіли видалити це з усіх них однією командою.
rename 's/^CD RIP //' *
CD RIP 01 Song.mp3 до 01 Song.mp3
Зверніть увагу на додатковий простір у '^CD RIP ', без простору всі файли мали б пробіл як перший символ файлу. Також зауважте, що це буде працювати без ^символу, але відповідатиме CD RIP будь-якій частині імені файлу. У ^гарантує , що тільки видаляє символи , якщо вони є початком файлу.
Суфікс
Додати :
rename 's/$/_MySuffix/' *
document.pdf перейменований на document.pdf_MySuffix
Змінити :
rename 's/\.pdf$/.doc/' *
зміниться Something.pdfв Something.doc. (Причина зворотної косої риси полягає .в тому, що символом підстановки в регулярному виразі є .pdfзбіг, qPDFтоді як \.pdfзбігається лише точний рядок .pdf. Також дуже важливо зауважити, якщо ви не знайомі з BASH, ви повинні ставити зворотні косої риски в SINGLE лапки! Ви не можете опускати цитати або використовувати подвійні лапки, або bash намагатиметься їх перекласти. У bash \. і "\." equals .. (Але використовуються подвійні лапки та зворотні косої риси, наприклад, "\ n" для нового рядка, але оскільки "\."це не дійсна зворотна послідовність втечі, це перекладається на .)
Насправді ви навіть можете вкласти частини рядка в лапки замість цілого: 's/Search/Replace/g'це те саме, що s/'Search'/'Replace'/gі s/Search/Replace/gв BASH. Ви просто повинні бути обережними щодо спеціальних символів (і пробілів).
Я пропоную використовувати -nваріант, коли ви не позитивні, у вас є правильні регулярні вирази. Він показує, що було б перейменовано, а потім виходить, не роблячи цього. Наприклад:
rename -n s/'One'/'Two'/g *
Тут буде перераховано всі зміни, які він був би внесений, якби ви не поставили -nпрапор туди. Якщо це добре виглядає, натисніть, Upщоб повернутися назад, а потім стерти -nта натисніть Enter(або замініть його, -vщоб вивести всі внесені зміни).
Примітка : Версії Ubuntu вище 17.04 не постачаються renameза замовчуванням, однак вони все ще доступні у сховищах. Використовуйте sudo apt install renameдля його встановлення