Ciao
bella la filosofia Unix e non sono ironico. Ma se ho un tool di dimensioni ridotte (~50 kB) che da solo fa benissimo solo quella specifica cosa lì che mi serve (in questo caso rinominare gruppi di file), mi spiegate perché dovrei complicarmi la vita a creare una pipeline, lanciando una sfilza di processi differenti? ognuno dei tool della pipeline (find, grep, mv etc etc)devo padroneggiarlo comunque, non è che la linea di comando mi si riempe da sola. E se poi qualcosa va storto nella pipeline il debug risulta più complesso da fare che in un unico comando (secondo me).
Comunque sì, rename usa la sintassi di Perl per le espressioni regolari.
NB: nei seguenti suggerimenti uso la stringa "XXXX" come sostituto; se non devo sostituire ma cancellare basterà mettere la stringa vuota, cioè niente, al posto di XXXX.
Si può fare così se interessa rispettare tutte le estensioni esistenti:
Codice: Seleziona tutto
# sostituisce dal penultimo al quintultimo carattere prima della prima estensione
rename -n 's/(.+?)(.{4})(.\..+)/$1XXXX$3/' *
rename(abcdefghi.xml.p7m, abcdXXXXi.xml.p7m)
Così se interessa rispettare solo l'ultima estensione esistente:
Codice: Seleziona tutto
# sostituisce dal penultimo al quintultimo carattere prima dell'ultima estensione
rename -n 's/(.+)(.{4})(.\..+)/$1XXXX$3/' *
rename(abcdefghi.xml.p7m, abcdefghXXXXl.p7m)
Se invece non si vuole mantenere l'estensione:
Codice: Seleziona tutto
# sostituisce dal penultimo al quintultimo senza badare all'eventuale estensione
rename -n 's/(.+)(.{4})(.)/$1XXXX$3/' *
rename(abcdefghi.xml.p7m, abcdefghi.xmXXXXm)
Questo sostituisce dal secondo al quinto carattere senza rispettare estensioni:
Codice: Seleziona tutto
rename -n 's/(.)(.{4})(.+)/$1XXXX$3/' *
rename(abcdefghi.xml.p7m, aXXXXfghi.xml.p7m)
rename(ABC.xml, AXXXXml)
Anche questo sostituisce dal secondo al quinto carattere ma se il nomefile è troppo breve e la sostituzione sovrascriverebbe l'estensione, non fa la sostituzione (salta quel file):
Codice: Seleziona tutto
rename -n 's/(.)(\w{4})(.+)/$1XXXX$3/' *
rename(abcdefghi.xml.p7m, aXXXXfghi.xml.p7m)
Nota per i mod: forse andrebbe spostato sotto "altre distribuzioni"
Credo invece che stia benissimo in "Programmazione": stiamo parlando di come si scrivono le espressioni regolari avanzate (quelle che grep usa con il flag -P) e questo vale in tutte le distro, con tutte le shell