Закорачите у свет Линукс-а и откријте како преименовати датотеке без употребе команде mv
. Сазнајте како је преименовање брзо, флексибилно и, у многим случајевима, једноставније. Овај водич ће вас увести у све могућности ове моћне команде.
Зашто је mv
недовољан?
Нема ништа лоше у команди mv
. Она одлично обавља свој посао и доступна је на свим Линукс дистрибуцијама, мацОС-у и осталим системима сличним Unix-у. Међутим, понекад вам је потребан алат који је посебно дизајниран за задатак, уместо да користите општу команду за све намене.
Основна функција команде mv
је премештање датотека. Њена могућност преименовања датотека је споредни ефекат. Иако ради посао, mv
није првенствено дизајниран за преименовање датотека.
Преименовање једне датотеке помоћу mv
Да бисте преименовали датотеку помоћу mv
, користите следећи формат: mv
, размак, тренутно име датотеке, размак и ново име које желите за датотеку. Затим притисните Enter.
Командом ls
можете проверити да ли је преименовање успешно извршено.
mv stara_datoteka.txt nova_datoteka.txt
ls *.txt
Преименовање више датотека помоћу mv
Преименовање више датотека са mv
постаје сложено. mv
не нуди уграђену подршку за групно преименовање. Морате користити напредне Bash трикове. Ово није једноставно и захтева знање о командној линији, што контрастира са једноставношћу преименовања једне датотеке користећи mv
.
Проблем брзо ескалира.
Замислите да имате директоријум са различитим датотекама, неке од њих имају екстензију „.прог“. Желите да их преименујете тако да имају екстензију „.прг“.
Како то урадити са mv
? Прво, погледајмо датотеке.
ls *.prog -l
Један од начина да се то уради, без писања посебне Bash скрипте, је следећи:
for f in *.prog; do mv -- "$f" "${f%.prog}.prg"; done
Да ли је успело? Проверимо.
ls *.pr*
Успели смо. Све датотеке су сада „.прг“, а више нема „.прог“ датотека у директоријуму.
Шта се заправо десило?
Шта је урадила претходна команда? Разложимо је:
for f in *.prog; do mv -- "$f" "${f%.prog}.prg"; done
Први део покреће петљу која пролази кроз сваку „.прог“ датотеку у директоријуму, једну по једну.
Други део дефинише шта ће се десити. Користи mv
да премести сваку датотеку на ново име. Ново име датотеке ће бити исто као и оригинално, осим што ће „.прог“ бити замењено са „.прг“.
Мора да постоји једноставнији начин
Постоји. То је команда за преименовање.
Команда rename
није део стандардних Линукс дистрибуција, тако да морате да је инсталирате. Име команде може се разликовати у различитим Линукс фамилијама, али функције су исте. Само запамтите да користите одговарајуће име команде за вашу дистрибуцију.
За дистрибуције засноване на Ubuntu и Debian, инсталирајте rename
на следећи начин:
sudo apt-get install rename
За дистрибуције засноване на Fedora и RedHat, инсталирајте rename
на овај начин (обратите пажњу на „p“ на почетку, што значи Perl):
sudo dnf install prename
За Manjaro Linux, користите следећу команду. Уочите да се команда зове perl-rename
.
sudo pacman -Syu perl-rename
Хајде да поновимо
Овог пута користићемо команду rename
. Вратимо се на почетно стање да бисмо имали „.прог“ датотеке.
ls *.prog
Сада ћемо користити следећу команду за преименовање. Затим ћемо проверити са ls
да ли је успело. Не заборавите да замените rename
са одговарајућим именом команде ако не користите Ubuntu или Debian.
rename 's/\.prog/\.prg/' *.prog
ls *.pr*
Успели смо. Сада су све датотеке „.прг“ и нема више „.прог“ датотека.
Шта се десило овог пута?
Објаснимо ту магију у три дела.
Први део је име команде, rename
(или prename
или perl-rename
, за друге дистрибуције).
Последњи део је *.prog
, који говори rename
да делује на све „.прог“ датотеке.
Средњи део дефинише шта желимо да урадимо са сваким именом датотеке. s
означава замену. Први термин (\.prog
) је оно што ће rename
тражити у сваком имену датотеке, а други термин (\.prg
) је оно чиме ће бити замењен.
Средњи део команде, или централни израз, је Перл ‘регуларни израз‘. Управо то даје флексибилност команди за преименовање.
Промена других делова имена датотеке
До сада смо мењали само екстензије. Хајде да модификујемо друге делове имена.
У директоријуму се налазе датотеке са изворним кодом у C-у. Сва имена датотека имају префикс „сланг_“. Можемо то проверити командом ls
.
ls sl*.c
Заменимо сва појављивања „сланг_“ са „сл_“. Формат команде нам је познат. Само мењамо термин за претрагу, термин за замену и тип датотеке.
rename 's/slang_/sl_/' *.c
Овог пута тражимо „.c“ датотеке и „сланг_“. Сваки пут када се „сланг_“ нађе у имену датотеке, замењује се са „сл_“.
Резултат команде можемо проверити понављањем команде ls
са истим параметрима:
ls sl*.c
Брисање дела имена датотеке
Можемо уклонити део имена датотеке тако што ћемо термин за претрагу заменити празним стрингом.
ls *.c
rename 's/sl_//' *.c
ls *.c
Командом ls
видимо да све наше „.c“ датотеке имају префикс „сл_“. Уклонимо га.
Команда за преименовање има исти формат као и пре. Тражићемо „.c“ датотеке. Термин за претрагу је „сл_“, а нема термина за замену. Две косе црте без ичега између њих означавају празан стринг.
rename
ће обрадити сваку „.c“ датотеку појединачно. Тражиће „сл_“ у имену датотеке. Ако га нађе, неће га заменити ничим. Другим речима, избрисаће га.
Другом употребом ls
потврђујемо да је префикс „сл_“ уклоњен из сваке „.c“ датотеке.
Ограничавање промена на одређене делове имена датотеке
Погледајмо датотеке које имају стринг „парам“ у имену. Заменимо га са „параметар“. Затим ћемо проверити са ls
шта се десило.
ls *param*
rename 's/param/parameter/' *.c
ls *param*
Четири датотеке имају „парам“ у имену. param.c
, param_one.c
, и param_two.c
имају „парам“ на почетку имена. third_param.c
има „парам“ на крају имена, пре екстензије.
Команда за преименовање ће тражити „парам“ свуда у имену и заменити га са „параметар“.
Другом употребом ls
видимо да се то управо десило. Без обзира да ли је „парам“ био на почетку или на крају, замењен је са „параметар“.
Можемо користити Перл метазнакове да прецизирамо понашање средњег израза. Метазнакови су симболи који представљају позиције или знакове. На пример, ^
значи „почетак стринга“, $
значи „крај стринга“ и .
означава било који један знак (осим новог реда).
Користићемо метазнак за почетак стринга (^
) да ограничимо претрагу на почетак имена датотеке.
ls *param*.c
rename 's/^parameter/value/' *.c
ls *param*.c
ls value*.c
Датотеке које смо преименовали су наведене. Видимо да се стринг „параметар“ налази на почетку три имена датотеке и на крају једног имена.
Наша команда за преименовање користи метазнак за почетак реда (^
) пре термина за претрагу „параметар“. Ово говори rename
да тражи термин само ако је на почетку имена. Ако се „параметар“ налази било где другде, биће игнорисан.
Са ls
видимо да датотека која је имала „параметар“ на крају имена није промењена, док су три датотеке које су га имале на почетку имале „параметар“ замењен са „вредност“.
Снага rename
је у снази Перла. Све Перлове могућности су вам доступне.
Претраживање са групама
rename
има још трикова. Погледајмо случај када имате датотеке са сличним низовима. Нису идентични, па једноставна претрага и замена неће радити.
Користићемо ls
да видимо које датотеке почињу са „стр“. Имамо string.c
и strangle.c
. Можемо да преименујемо оба користећи груписање.
Централни израз ове команде тражиће низове у именима датотека који имају „стри“ или „стра“ којима следи „нг“. Дакле, тражићемо „стринг“ и „странг“. Термин за замену је „банг“.
ls str*.c
rename 's/(stri|stra)ng/bang/' *.c
ls ban*.c
Другом употребом ls
потврђујемо да је string.c
постао bang.c
, а strangle.c
је bangle.c
.
Коришћење превода са rename
rename
може извршавати операције над именима датотека које се називају преводи. Пример је претварање имена датотека у велика слова.
У команди испод, приметите да не користимо s/
за покретање централног израза, већ y/
. Ово говори rename
да не врши замену, већ превод.
Термин a-z
је Перл израз који означава сва мала слова. Слично, A-Z
означава сва велика слова.
Централни израз у овој команди би се могао парафразирати као: „ако се било које мало слово у распону од а до з нађе у имену датотеке, замените га одговарајућим знаком из низа великих слова од А до З“.
Да бисте претворили сва имена „.prg“ датотека у велика слова, користите следећу команду:
rename 'y/a-z/A-Z/' *.prg
ls *.PRG
Команда ls
показује да су сва имена „.prg“ датотека сада у великим словима. Заправо, то више нису „.prg“ датотеке, већ „.PRG“ датотеке. Линукс разликује велика и мала слова.
Можемо обрнути претходну команду тако што ћемо променити редослед a-z
и A-Z
у централном изразу.
rename 'y/A-Z/a-z/' *.PRG
ls *.prg
Не (морате) научити Перл за пет минута
Учење Перла је корисно, али не морате имати опсежно знање о Перлу да бисте користили све предности rename
. Можете да уштедите време и труд уз малу помоћ Перлових регуларних израза.