rnm – a legjobb fájlátnevező CLI módban

Linux scriptek

A fájlok átnevezésével már foglalkoztam, mutattam egy nagyon jó grafikus fájl átnevező programot. Ezenkívül még vagy egy tucat jól, vagy kevésbé jól használható létezik Linux rendszerekre. De az említett fájl átnevezővel volt egy gondom: grafikus, és ha becsukom a beállítási minták elvesznek. Általában pár viszonylag egyszerű átnevezést használok, amit nem hatékony minden alkalommal beállítani. Ezért kellett valami más, ami CLI és sokat tud. Ismeretségi körben rákérdezte: kellene egy jó, sokat tudó, regex-eket kezelő átnevező. Kaptam pár tippet, de ezt a rnm-et  nagyon dicsérték. Megnéztem. Az első gondolatom csak annyi volt: na neeee! Ez annyira bonyolult, hogy nem akarom megtanulni. Pár kísérlet után ráéreztem, hogy ez igaz is: összetett, sokat tud, kapcsolók, opciók és azokat finomító kapcsolókkal lehet vezérelni, de – és itt a de nagyon fontos – egy idő után teljesen átlátható.
Aki tervezte nagyrészt azokra a funkciókra helyezte a hangsúlyt, melyeket sokszor használunk, de a normál átnevezőkben nem, vagy csak kerülőúton lehet elérni.

Mit tud az nrm fájlátnevető?

  • Fájlok, könyvtárak és hivatkozások átnevezését tömegesen, dinamikusan létrehozott nevekkel. Ezt a legtöbb átnevező tudja, aki eddig mást használt, annak sem kell lemondani a megszokott átnevezési lehetőségekről. A “cseréljen ki egy megadott karaktersort, egy másikra” funkció itt is megtalálható.
  • Visszavonás: vissza tudod vonni az átnevezéseket! Azaz, ha valamit jól leszúrtál az visszavonható. Ez nagyon kellemes funkció! Tömeges átnevezőknél nagyon kellemetlen, ha valamit elszúrtam és órákat kell dolgozni az rendbehozatalával. Már most érdemes eldönteni, hogy azt a három kapcsolót, ami ezt szabályozza kipróbálod.
  • Fájlinformációk (mtime, atime, ctime, engedély stb.) beillesztése tetszőleges formátumban. A jogosultság beszúrása kevésbé fontosak nekem, de a különféle létrehozási, módosítási stb. időpontokat már többször használom. Eddig egy bonyolultabb megoldással szúrtam be a biztonsági másolatokhoz a dátumot, de most csak pár kapcsolót kell ismerni…
  • Az indexelés és az indexelések formázása különféle módon. Ami gyakorlatilag a sorszámozást jelenti. Itt a sima “emeljük a sorszámot eggyel” témától kezdve a bonyolultabb, “tól-ig, megadott lépésközzel sorszámozzon, és a sorszám x karakter hosszú legyen” témáig bármi beállítható. Nem csak a megszokott, hanem tudományos és egyéb konverziókat is használhatod az indexekben, sorszámokban.
  • Különböző szintű szülő könyvtárnevek beszúrása a fájlnevekbe. Így a könyvtárban lévő összes fájl, amit szeretnél megkapja a könyvtár nevét, esetleg sorszámozva, az általad elvárt módon.
  • Kezelheted az aktuális könyvtárnevet, a fájlnevet, kiterjesztéssel és anélkül. Így hivatkozhatsz ezekre és menet közben ezekkel dolgozhatsz. Ezeket is érdemes ismerni!
  • Regex csere a fájlnév egy részének törléséhez/cseréjéhez. Ezt is sok Linuxos fájlátnevező ismeri, nem újdonság. Az PCRE2 szabványt használja, ami elterjedt, sokat tud. Aki már használt regex-et, annak nem lesz idegen. Bár az első látásra ezek a fura krix-krax karaktersorok, amikkel a kockafejek varázsolnak nagyon nehéznek tűnhetnek, de érdemes alapszinten megismerni a lehetőséget. Sok helyen, és sok formában használjuk ezeket a regex-es témát. Nagyon meg tudja könnyíteni egy-egy minta leírását, ha ismerjük ezt a lehetőséget.
  • A regex művelet csak fájlokon, csak könyvtáron, csak hivatkozáson vagy ezek bármelyik kombinációján hajtható végre. Ami kellemes, hiszen ha csak a könyvtárnévvel akarsz dolgozni, akkor azt is megadhatod, ha a fájl és könyvtár átnevezést is egy minta alapján szeretnéd, azt is.
  • Nagybetűs/kisbetűs konvertálás a fájlnévben. Sokszor hasznos, ha végig kisbetűssé, vagy nagybetűssé teheted a fájlnevet, de lehetőség van ennél sokkal összetett szabályokra is.
  • Keresési minta a megfelelő regex-el, vagy karakterlánccal rendelkező fájlokhoz. Alapfunkció, hogy meg tudjuk adni azokat a fájlokat, amikkel dolgoznia kellene…
  • Fordított keresés. A mintával ellentétes mintával dolgozik. Ez nagyon fura lehet első olvasatban, de gondoljunk bele, hogy milyen egyszerű így megadni azt, hogy azokat keresse, ahol valami nincs benne a mintában: nem tartalmazza a laci szót…
  • A keresési karakterláncok, minták fájlokban is megadhatóak.
  • Fájlok rendezése és indexelése. Itt a rendezést emelném ki. A legtöbb fájlátnevetőnek gondot okoz, ha nem natúr abc, vagy emelkedő sorrendben kell rendeznie a fájlokat a sorszámozáshoz. Itt megadható komolyabb rendezési, sorba állítási elv is. A fájlok rendezhetőek méret, módosítási idő, hozzáférési idő stb. szerint is.
  • Szimuláció futtatása. Így megnézheted a kész kimenete, módosítás nélkül. Bár a visszavonási parancsok jól működnek, de tesztelésnél, tanulásnál ez egy kényelmes megoldás.
  • Interaktívan működik, minden olyan esetben, amikor valami nem egyértelmű számára, rákérdez a módosításra. Ez ki is kapcsolható egy sima -y kapcsolóval, ha már 10%-ig biztos vagy a helyes működésben, egy bonyolultabb átnevezésnél.

Mikor nem jó neked ez a fájlátnevező?

Ha zsigeri utálatot érzel a terminálos módszerekkel szemben, és azt érzed, hogy megint rád akarják erőltetni a parancssort. Ez a program CLI, így ha nem szereted az ilyent, ne használd.

Ha ritkán, és viszonylag egyszerű átnevezéseket használsz. Heti pár egyszerű átnevezéshez ez az „ipari” eszköz nem kell. Vannak nagyon jó fájlátnevezők, grafikusak és egyszerűen használható felülettel.

Ha nem szeretsz scriptet írni. Ez az rnm kifejezetten olyan esetben jó ha összetett keresés, csere megoldásokban gondolkodsz, és azt automatizálni akarod.

Rnm telepítése

Arch AUR, Ubuntu és származékai PPA, így nincs semmi extra. A többi Linux disztribúciónál forrásból kell telepíteni, bár ott sem kizárt, hogy van kész csomag. Az oldalán van leírás: https://neurobin.org/projects/softwares/unix/rnm/#install

Az rnm fájlátnevező használata

Magyar leírást nem találtam, de az oldalukon igen részletes leírás található angolul. Nem célom teljes leírást adni, mert nem is tudnék, csak pár lehetőséget emelek ki, melyeket ők is bemutatnak. A rnm összetett, sokat tudó átnevező. Kezdeti időben érdemes lépésről lépesre felépíteni egy parancsot, megismerni a kapcsolókat és mindent letesztelni.

Csak pár ízelítő:

rnm -ns newname oldfile

Sima átnevezés. Ezért biztosan nem érdemes használni, ezt mindegyik tudja!

rnm -ns '/fn/ adjukhozzáezt' oldfile

Egy előtagot ad a régi névhez: adjukhozzáeztoldfile lesz a kimenete. Hasznos, ha minden fájlhoz ugyanazt akarjuk hozzáadni.

rnm -ns '/n/ /i/./e/' ./* -dp -1

A fenti parancs annyit tesz, hogy -ns, azaz az új fájlnév legyen az alábbi formátumban

/n/ az adott fájl neve, kiterjesztés nélkül, plusz

/i/ indexelésre ad utasítást, azaz sorszámozott legyen, és a

./e/ a kiterjesztés kerüljön be, de azzal semmi nem történt, csak simán másoljad be.

Majd meg kell adni azokat a fájlokat, amikkel dolgozzon: ./* ismert megoldá. Az adott mappa, összes fájlján végezze el a műveletet. Itt pld. a ./*.txt már csak a txt fájlokon fog dolgozni.

-dp -1 Az összes alkönyvtárban dolgozhat.

Az indexelést és annak formátumát nagyon tág keretek közt határozhatod meg, így pont olyan lesz, mint ami neked kell.

Fájl név részletek cseréje: elsotag_másodiktag.txt

rnm -rs '/(.*)_(.*)\.txt/\2_\1.txt/' ./*

-rs parancsot kap a mintakeresés, és cserére

Az általános felépítés egyszerű: /minta amit akarok cserélni/Amire akarom cserélni/esetleges módosítók. Ismerős? Aki használt már pld. sed-et, vagy olyan CLI fájlátnevező, vagy szöveg manipulálót, ami cserélni is képes, annak ez már ismert.

(.*)_(.*) ami több tagra osztja a fájl nevet: . azaz egy bármi karakter, * egymásután bármennyiszer, addig egy tag, amíg nem jön egy _ jel, és azt követi a második tag, ami szintén bármennyi, bármilyen karakter, addig, amit nem jön egy pont és a txt.

Amire cseréljük: a másodiknak megtalált tagot tedd előre \2 majd tegyél be egy _ jelet, azt meg kövesse az első tag, és ezt egy pont és a txt. Egyszerű? Nem, de ha már a második ilyen fájlnév darabolást végzed, akkor nem lesz ezzel semmi gond 🙂

Ami kérdés lehet: a txt előtti pont mitől lett sima pontként értelmezve, és miért nem „akármilyen karakter” mint előtte a másik kettő pötty? Mert egy \ van előtte, ez pedig elmondja a rendszernek, hogy bár egy regexp-ben van, de bizony ezt szó szerint kell venni: ez a pötty valóban pont és nem egy általános helyettesítő jelzés. Érdemes legalább az alap ilyen helyettesítő regexp kódokat megtanulni. Mondjuk egy tucatnyi van, amivel már elég jól el lehet lavírozni. https://www.debuggex.com/cheatsheet/regex/pcre

Ahogy látod az elvégzendő feladat egyszeres idézőjelbe kerül.

Majd megadod, hogy ./* minden, az adott könyvtárban lévő állományt nézzen meg. Miért nem pontosította a minta írója ezt így: ./*.txt annak érdekében, hogy csak a txt fájlokon dolgozzon? Nem íja át a ezt_erre.mp3-ast is? Nem! Mert ott a minta nem illeszkedik: elő tag, aláhúzás, második minta, pont – eddig jó! De azt nem txt követ.

Cserélje az összes _ (aláhúzás) szóközre:

rnm -rs '/_/ /g' ./*

Gondolom ezt a „bonyolult” kódsort mindeni érti 🙂

rnm -ns '/pd0/ /\d//i/./e/' -ifl 4 *.mp3

A /pd0/ a közvetlen könyvtár neve, amiben vagyunk. Ezt adja hozzá a fájlnévhez elől, majd -ifl 4 módon sima emelkedő sorrendben sorszámozzon, úgy, hogy a szám négy tagú legyen, elől nullákkal kitöltve: 0001 stb.

A legfontosabb rnm parancs csoport:

u: Visszavonja az aktuális könyvtár utolsó átnevezési műveletét. NAGYON hasznos.
-up: Visszavonja az átnevezést egy tetszőleges visszavonási útvonalról. Ha nem emlékszel arra, hogy pontosan melyik könyvtárban ténykedtél, és nevezted át a dolgokat:
-ups: A rendelkezésre álló visszavonási utak megjelenítése.
-duh: Törölje a megadott másodpercnél régebbi visszavonási előzményeket. Az elején nem kellene használni, majd csak azután, amikor 100%osan meggyőződtél, hogy minden jól ment.
-duhd: Az adott napnál régebbi visszavonási előzmények törlése. A fenti megjegyzés itt is igaz…

Ezenkívül rengeteg példát találhatsz az oldalukon, a leírás angol, de érthető, kisebb kísérletezés után már komolyabb műveleteket is el tudsz végezni!

A programot 2020. februárjában teszteltem.

Related Posts