Як використовувати команду перейменування на Linux

Як використовувати команду перейменування на Linux

Познайомтеся з потужним механізмом перейменування файлів у світі Linux і дайте mv - і собі - відпочинок. Rename є гнучким, швидким, а іноді навіть простішим. Ось підручник для цієї потужної команди.

Що не так з М.В.?

Там немає нічого поганого з mv Команда відмінно справляється зі своїм завданням, і її можна знайти у всіх дистрибутивах Linux, в macOS і в інших Unix-подібних операційних системах. Так що це завжди доступно. Але іноді вам потрібен бульдозер, а не лопата.

Команда mv має мету пересунути файли. Приємним побічним ефектом є те, що його можна використовувати для переміщення існуючого файлу в новий файл з новою назвою. У результаті ми перейменовуємо файл, і ми отримуємо те, що хочемо. Але mv не є спеціальним інструментом перейменування файлів.

Перейменування окремого файла за допомогою mv

Щоб використовувати mv для перейменування файла, введіть mv, пробіл, назву файла, пробіл і нову назву, яку ви хочете мати у файлі. Потім натисніть Enter.

Ви можете використовувати ls, щоб перевірити, що файл було перейменовано.

mv oldfile.txt newfile.txt

ls *.txt

Перейменування декількох файлів за допомогою mv

Все стає складніше, якщо ви хочете перейменувати декілька файлів. mv не можна впоратися з перейменуванням декількох файлів. Ви повинні використовувати деякі витончені трюки Баша. Це добре, якщо ви знайомі з деякими засобами командного рядка середнього класу, але складність перейменування декількох файлів за допомогою mv різко відрізняється від простоти використання mv для перейменування одного файла.

Речі загострюються швидко.

Припустимо, у нас є каталог з різними файлами різних типів. Деякі з цих файлів мають розширення «.prog». Ми хочемо перейменувати їх у командному рядку, щоб вони мали розширення «.prg».

Як ми намагаємося зробити це для нас? Давайте подивимося на файли.

ls *.prog -l

Ось один із способів зробити це, не вдаючись до написання файлу сценарію Bash.

для f в * .prog; do mv - ""$ f"" ""$ {f%.prog}.prg"

Це спрацювало? Давайте перевіримо файли і подивимося.

ls *.pr *

Так що так, це спрацювало. Тепер це всі файли «.prg», і в каталозі немає файлів «.prog».

Що зараз сталося?

Що насправді зробила ця довга команда? Давайте розберемося з цим.

для f в * .prog; do mv - ""$ f"" ""$ {f%.prog}.prg"

Перша частина запускає цикл, який по черзі обробляє кожен файл «.prog» в каталозі.

Наступна частина говорить, що буде робити обробка. Він використовує mv для пересування кожного файла в новий файл. Новий файл буде названо за назвою вихідного файлу за винятком частини «.prog». Замість цього буде використано нове розширення «.prg».

Має бути простіший шлях

Найімовірніше. Це команда rename.

rename не є частиною стандартного дистрибутива Linux, тому вам слід встановити його. Він також має інше ім'я в різних сімействах Linux, але всі вони працюють однаково. Вам просто потрібно замінити відповідну назву команди відповідно до використовуваної вами різновиду Linux.

у дистрибутивах на основі Ubuntu і Debian ви встановлюєте rename наступним чином:

sudo apt-get встановити перейменувати

У дистрибутивах, вироблених від Fedora і RedHat, ви встановили prename наступним чином: Зверніть увагу на початковий «р», який означає Perl.

sudo dnf встановити попередню назву

Щоб встановити його у Manjaro Linux, скористайтеся наступною командою. Зауважте, що команда перейменування називається perl-rename.

sudo pacman -Syu perl-перейменувати

Давайте зробимо це знову

І цього разу ми будемо використовувати rename. Ми повернемося назад, щоб у нас був набір файлів «.prog».

ls *.prog

Тепер давайте скористаємося наступною командою, щоб перейменувати їх. Потім ми перевіримо за допомогою ls, чи спрацювало це. Не забудьте замінити rename відповідною назвою команди для вашого Linux, якщо ви не використовуєте Ubuntu або Linux на основі Debian.

перейменуйте «s/.prog/.prg/» * .prog

ls *.pr *

Це спрацювало, тепер вони всі файли «.prg», і в каталозі не залишилося файлів «.prog».

Що сталося цього разу?

Давайте пояснимо цю чарівність у трьох частинах.

Перша частина - це назва команди rename (або prename або perl-rename, для інших дистрибутивів).

Остання частина - це * .prog, яка повідомляє rename для роботи з усіма файлами «.prog».

Середня частина визначає роботу, яку ми хочемо виконати з кожною назвою файла. s означає заміну. Перший термін (.prog) - це те, що rename буде шукати в кожному імені файла, а другий термін (.prg) - те, чим він буде замінений.

Середня частина команди, або центральний вираз, є «формальним виразом» Perl, і саме це дає команді rename гнучкість.

Зміна інших частин назви файлу

Поки ми змінили розширення файлів, давайте змінимо інші частини імен файлів.

У теці багато файлів з вихідним кодом. Всі імена файлів мають префікс "slang_". Ми можемо перевірити це за допомогою ls.

ls sl *.c

Ми збираємося замінити всі входження "slang _" на "sl_". Формат команди нам вже знайомий. Ми просто змінюємо пошуковий термін, що замінює термін і тип файлу.

перейменувати "s/slang _/ sl_' * .c

Цього разу ми шукаємо файли ".c" і шукаємо "slang_". Кожного разу, коли "slang _" зустрічається в імені файла, воно замінюється "sl_".

Ми можемо перевірити результат цієї команди, повторивши команду ls зверху з тими ж параметрами:

ls sl *.c

Вилучення частини назви файла

Ми можемо вилучити частину назви файлу, замінивши пошуковий термін нічим.

ls *.c

перейменувати «s/sl _//» * .c

ls *.c

З команди ls видно, що всі наші файли ".c" починаються з "sl_". Давайте позбудемося цього в цілому.

Команда rename той самий формат, що й раніше. Ми будемо шукати файли «.c». Пошуковий термін "sl_", але термін заміщення відсутній. Два зворотних шари без будь-чого між ними нічого не значать, порожній рядок.

rename оброблятиме кожен файл «.c» по черзі. Він буде шукати «sl _» у назві файла. Якщо його знайдено, його буде замінено нічим. Іншими словами, пошук вилучається.

Повторне використання команди ls підтверджує, що префікс «sl _» був вилучений з кожного файлу «.c».

Обмежити зміни для певних частин назв файлів

Використовуйте ls для перегляду файлів, у назві яких є рядок param. Потім ми будемо використовувати rename, щоб замінити цей рядок рядком «параметр». Ми будемо використовувати ls ще раз, щоб побачити вплив, який команда rename зробила на ці файли.

ls * param *

перейменуйте «s/param/parameter» * .c

ls * param *

Знайдено чотири файли з назвою param у назві файла. param.c, param_one.c і param_two.c мають «param» на початку свого імені. third_param.c має «param» наприкінці свого імені, безпосередньо перед розширенням.

Команда rename буде шукати «param» всюди в імені файла і замінювати його «параметром» у всіх випадках.

Друге використання команди ls показує нам, що саме це і сталося. Незалежно від того, чи був «param» на початку або в кінці імені файлу, він був замінений «параметром».

Ми можемо використовувати метасимволи Perl, щоб уточнити поведінку середнього виразу. Метасимволи - це символи, які представляють позицію або послідовність символів. Наприклад,'означає'початок рядка', $ означає'кінець рядка'і. означає будь-який окремий символ (крім символу нового рядка).

Ми збираємося використовувати метасимвол початку рядка, щоб обмежити наш пошук початком імен файлів.

ls * param *.c

перейменуйте параметр/значення/' * .c

ls * param *.c

ls значення * .c

Перелічено файли, які ми перейменували раніше, і ми можемо бачити рядок «параметр» на початку трьох імен файлів і в кінці одного з імен файлів.

Наша команда rename використовує метасимвол початку рядка (^) перед пошуковим терміном «параметр». Це свідчить про те, що rename враховує лише знайдений пошуковий термін, якщо він знаходиться на початку назви файла. Рядок пошуку «параметр» буде ігноруватися, якщо він знаходиться де-небудь ще в імені файлу.

Перевіряючи за допомогою ls, ми бачимо, що ім'я файлу з «параметром» наприкінці назви файлу не було змінено, але для трьох імен файлів з «параметром» на початку їх імен рядок пошуку був замінений заміною Термін «вартість».

Сила rename полягає у владі Perl. Вся міць Perl у вашому розпорядженні.

Пошук з групами

rename має ще більше хитрощів у рукаві. Розгляньмо випадок, коли у вас можуть бути файли зі схожими рядками в іменах. Вони не зовсім однакові рядки, тому простий пошук і заміна тут не спрацюють.

У цьому прикладі ми використовуємо ls щоб перевірити, які файли у нас починаються з «str». Є два з них, string.c і strangle.c. Ми можемо перейменувати обидва рядки одночасно, використовуючи техніку, звану угрупованням.

Центральний вираз цієї команди rename буде шукати рядки у назвах файлів, які мають послідовність символів «stri» або «stra», де за цими послідовностями одразу слідує «ng». Іншими словами, наш пошуковий термін буде шукати слова «рядок» і «задушення». Підстановочний термін - «вибух».

ls str *.c

перейменуйте's/( stri | stra) ng/bang/' * .c

ls ban *.c