Come utilizzare il comando rinomina su Linux

Prendi confidenza con il file che rinomina il fulcro del mondo Linux e dai a mv ea te stesso una pausa. Rinominare è flessibile, veloce e talvolta anche più semplice. Ecco un tutorial per questa centrale elettrica di un comando.

Cosa c’è di sbagliato in mv?

Non c’è niente di sbagliato in mv. Il comando fa un bel lavoro, e si trova su tutte le distribuzioni Linux, in macOS e in altri sistemi operativi simili a Unix. Quindi è sempre disponibile. Ma a volte hai solo bisogno di un bulldozer, non di una pala.

Il comando mv ha uno scopo nella vita, ovvero spostare i file. È un felice effetto collaterale che può essere utilizzato per spostare un file esistente in un nuovo file, con un nuovo nome. L’effetto finale è rinominare il file, così otteniamo ciò che vogliamo. Ma mv non è uno strumento dedicato per rinominare i file.

Rinominare un singolo file con mv

Per usare mv per rinominare un file, digita mv, uno spazio, il nome del file, uno spazio e il nuovo nome che desideri abbia il file. Quindi premere Invio.

Puoi usare ls per controllare che il file sia stato rinominato.

mv oldfile.txt newfile.txt
ls *.txt

Rinominare più file con mv

Le cose diventano più complicate quando vuoi rinominare più file. mv non è in grado di gestire la ridenominazione di più file. Devi ricorrere all’uso di alcuni ingegnosi trucchi Bash. Va bene se conosci un fu da riga di comando di livello medio, ma la complessità di rinominare più file con mv è in netto contrasto con la facilità di usare mv per rinominare un singolo file.

Le cose si intensificano rapidamente.

Supponiamo di avere una directory con una varietà di file al suo interno, di tipi diversi. Alcuni di questi file hanno l’estensione “.prog”. Vogliamo rinominarli dalla riga di comando in modo che abbiano un’estensione “.prg”.

Come possiamo convincerci a farlo per noi? Diamo un’occhiata ai file.

ls *.prog -l

ls * .prog -l in una finestra di terminale

Ecco un modo per farlo che non ricorre alla scrittura di un vero file di script Bash.

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

per f in * .prog;  fare mv -

Ha funzionato? Controlliamo i file e vediamo.

ls *.pr*

ls * .pr * in una finestra di terminale

Quindi sì, ha funzionato. Adesso sono tutti file “.prg” e non ci sono file “.prog” nella directory.

Cosa è appena successo?

Cosa ha fatto effettivamente quel lungo comando? Analizziamolo.

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

La prima parte avvia un ciclo che elaborerà a turno ogni file “.prog” nella directory.

La parte successiva dice cosa farà l’elaborazione. Utilizza mv per spostare ogni file in un nuovo file. Il nuovo file verrà denominato con il nome del file originale escludendo la parte “.prog”. Verrà invece utilizzata una nuova estensione di “.prg”.

Deve esserci un modo più semplice

Sicuramente. È il comando di rinomina.

rinominare non fa parte di una distribuzione Linux standard, quindi sarà necessario installarlo. Ha anche un nome diverso in diverse famiglie di Linux, ma funzionano tutti allo stesso modo. Dovrai solo sostituire il nome del comando appropriato in base al gusto Linux che stai utilizzando.

nelle distribuzioni Ubuntu e derivate da Debian installate rinominate in questo modo:

sudo apt-get install rename

sudo apt-get install rinomina in una finestra di terminale

Nelle distribuzioni derivate da Fedora e RedHat si installa il prename in questo modo. Notare la “p” iniziale, che sta per Perl.

sudo dnf install prename

sudo dnf installa prename in una finestra di terminale

Per installarlo in Manjaro Linux utilizzare il seguente comando. Notare che il comando di ridenominazione si chiama perl-rename.

sudo pacman -Syu perl-rename

sudo pacman -Syu perl-rename in una finestra di terminale

Facciamolo di nuovo

E questa volta useremo rename. Riporteremo indietro l’orologio in modo da avere una serie di file “.prog”.

ls *.prog

ls * .prog in una finestra di terminale

Ora usiamo il seguente comando per rinominarli. Verificheremo quindi con ls se ha funzionato. Ricorda di sostituire rename con il nome del comando appropriato per il tuo Linux se non stai usando Ubuntu o un Linux derivato da Debian.

rename 's/.prog/.prg/' *.prog
ls *.pr*

rinominare 's / .prog / .prg /' * .prog in una finestra di terminale

Ha funzionato, ora sono tutti file “.prg” e non ci sono file “.prog” nella directory.

Cosa è successo in questo periodo?

Spieghiamo quel po ‘di magia, in tre parti.

La prima parte è il nome del comando, rename (o prename o perl-rename, per le altre distribuzioni).

L’ultima parte è * .prog, che dice a rename di operare su tutti i file “.prog”.

La parte centrale definisce il lavoro che vogliamo essere fatto su ogni nome di file. La s significa sostituto. Il primo termine (.prog) è ciò che rename cercherà in ogni nome di file e il secondo termine (.prg) è ciò con cui verrà sostituito.

La parte centrale del comando, o espressione centrale, è un Perl ‘espressione regolare‘ed è ciò che conferisce flessibilità al comando di rinomina.

Modifica di altre parti di un nome file

Finora abbiamo cambiato le estensioni dei nomi dei file, modificiamo altre parti dei nomi dei file.

Nella directory ci sono molti file di codice sorgente C. Tutti i nomi dei file hanno il prefisso “slang_”. Possiamo verificarlo con ls.

ls sl*.c

ls sl * .c in una finestra di terminale

Sostituiremo tutte le occorrenze di “slang_” con “sl_”. Il formato del comando ci è già familiare. Stiamo solo cambiando il termine di ricerca, il termine sostitutivo e il tipo di file.

rename 's/slang_/sl_' *.c

rinomina 's / slang_ / sl_' * .c in una finestra di terminale

Questa volta stiamo cercando file “.c” e cercando “slang_”. Ogni volta che “slang_” si trova in un nome di file, viene sostituito con “sl_”.

Possiamo controllare il risultato di quel comando ripetendo il comando ls dall’alto con gli stessi parametri:

ls sl*.c

ls sl * .c in una finestra di terminale

Eliminazione di una parte di un nome file

Possiamo rimuovere una parte di un nome di file sostituendo il termine di ricerca con niente.

ls *.c
rename 's/sl_//' *.c
ls *.c

rinomina 's / sl _ //' * .c in una finestra di terminale

Possiamo vedere dal comando ls che i nostri file “.c” sono tutti preceduti da “sl_”. Liberiamolo del tutto.

Il comando rename segue lo stesso formato di prima. Cercheremo file “.c”. Il termine di ricerca è “sl_”, ma non esiste un termine di sostituzione. Due barre rovesciate senza nulla tra di loro non significano nulla, una stringa vuota.

rename elaborerà a turno ogni file “.c”. Cercherà “sl_” nel nome del file. Se viene trovato, non verrà sostituito da nulla. In altre parole, il termine di ricerca viene eliminato.

Il secondo utilizzo del comando ls conferma che il prefisso “sl_” è ​​stato rimosso da ogni file “.c”.

Limita modifiche a parti specifiche dei nomi di file

Usiamo ls per guardare i file che hanno la stringa “param” nel nome del file. Quindi useremo rename per sostituire quella stringa con la stringa “parametro”. Useremo ancora una volta ls per vedere l’effetto che il comando rename ha avuto su quei file.

ls *param*
rename 's/param/parameter' *.c
ls *param*

rinominare 's / param / parametro' * .c in una finestra di terminale

Vengono trovati quattro file che hanno “param” nel nome del file. param.c, param_one.c e param_two.c hanno tutti “param” all’inizio del nome. terzo_param.c ha “param” alla fine del nome, subito prima dell’estensione.

Il comando rename cercherà “param” ovunque nel nome del file e lo sostituirà con “parametro” in tutti i casi.

Il secondo utilizzo del comando ls ci mostra che è esattamente quello che è successo. Se “param” era all’inizio o alla fine del nome del file, è stato sostituito da “parametro”.

Possiamo usare i metacaratteri di Perl per raffinare il comportamento dell’espressione centrale. I metacaratteri sono simboli che rappresentano posizioni o sequenze di caratteri. Ad esempio, ^ significa “inizio di una stringa”, $ significa “fine di una stringa” e. significa qualsiasi carattere singolo (a parte un carattere di nuova riga).

Useremo l’inizio del metacarattere della stringa (^) per limitare la nostra ricerca all’inizio dei nomi dei file.

ls *param*.c
rename 's/^parameter/value/' *.c
ls *param*.c
ls value*.c

rinominare 's / ^ parametro / valore /' * .c in una finestra di terminale

I file che abbiamo rinominato in precedenza sono elencati, e possiamo vedere la stringa “parametro” è all’inizio di tre nomi di file ed è alla fine di uno dei nomi di file.

Il nostro comando rinomina utilizza il metacarattere di inizio riga (^) prima del termine di ricerca “parametro”. Questo dice a rename di considerare solo il termine di ricerca trovato se è all’inizio del nome del file. La stringa di ricerca “parametro” verrà ignorata se si trova in qualsiasi altra parte del nome del file.

Controllando con ls, possiamo vedere che il nome del file che aveva “parametro” alla fine del nome del file non è stato modificato, ma i tre nomi di file che avevano “parametro” all’inizio del loro nome hanno avuto la stringa di ricerca sostituita dal sostituto termine “valore”.

Il potere di rinominare risiede nel potere di Perl. Tutti di potere di Perl è a tua disposizione.

Ricerca con raggruppamenti

rename ha ancora più assi nella manica. Consideriamo il caso in cui potresti avere file con stringhe simili nei loro nomi. Non sono esattamente le stesse stringhe, quindi una semplice ricerca e sostituzione non funzionerà qui.

In questo esempio usiamo ls per controllare quali file abbiamo che iniziano con “str”. Ce ne sono due, string.c e strangle.c. Possiamo rinominare entrambe le stringhe contemporaneamente utilizzando una tecnica chiamata raggruppamento.

L’espressione centrale di questo comando di ridenominazione cercherà le stringhe all’interno dei nomi di file che hanno la sequenza di caratteri “stri” o “stra” dove quelle sequenze sono immediatamente seguite da “ng”. In altre parole, il nostro termine di ricerca cercherà “stringa” e “strang”. Il termine di sostituzione è “bang”.

ls str*.c
rename 's/(stri|stra)ng/bang/' *.c
ls ban*.c

rinominare 's / (stri | stra) ng / bang /' * .c in una finestra di terminale

L’uso di ls una seconda volta conferma che string.c è diventato bang.c e strangle.c è ora bangle.c.

Utilizzo delle traduzioni con rinomina

Il comando rename può eseguire azioni sui nomi di file chiamate traduzioni. Un semplice esempio di traduzione potrebbe essere quello di forzare un insieme di nomi di file in maiuscolo.

Nel comando rinomina di seguito si noti che non stiamo usando una s / per avviare l’espressione centrale, stiamo usando y /. Questo dice a rename che non stiamo effettuando una sostituzione; stiamo eseguendo una traduzione.

Il termine az è un’espressione Perl che significa tutti i caratteri minuscoli nella sequenza dalla a alla z. Allo stesso modo, il termine AZ rappresenta tutte le lettere maiuscole nella sequenza dalla A alla Z.

L’espressione centrale in questo comando potrebbe essere parafrasata come “se una qualsiasi delle lettere minuscole dalla a alla z si trova nel nome del file, sostituiscile con i caratteri corrispondenti dalla sequenza di caratteri maiuscoli dalla A alla Z.”

Per forzare i nomi dei file di tutti i file “.prg” in maiuscolo, utilizzare questo comando:

rinomina “y / az / AZ /” * .prg

ls *.PRG

rinominare 'y / az / AZ /' * .prg in una finestra di terminale

Il comando ls ci mostra che tutti i nomi di file “.prg” sono ora in maiuscolo. Infatti, per essere rigorosamente precisi, non sono più file “.prg”. Sono file “.PRG”. Linux fa distinzione tra maiuscole e minuscole.

Possiamo invertire l’ultimo comando invertendo la posizione dei termini az e AZ nell’espressione centrale.

rinomina “y / AZ / az /” * .PRG

ls *.prg

rinominare 'y / AZ / az /' * .PRG in una finestra di terminale

Tu (Wo | Do) non impari Perl in cinque minuti

Prendere confidenza con Perl è tempo ben speso. Ma per iniziare a utilizzare le capacità di risparmio di tempo del comando rename, non è necessario avere molta conoscenza di Perl per ottenere grandi vantaggi in termini di potenza, semplicità e tempo.