Linux: rename, rename.ul, prename, perl-rename: che confusione!

Linux names confusion
Indice dei Contenuti

Sintesi di questo articolo.

In questo articolo riporto alcune osservazioni su come rinominare i documenti in GNU/Linux utilizzando comandi testuali, chiarendo alcune differenze tra varie distribuzioni.

Il comando rename non ha, infatti, un comportamento univoco nelle distribuzioni derivate da Debian rispetto a quelle derivate da Fedora e Arch.

Cercherò di chiarire il contenuto dei diversi comandi ed il diverso comportamento di comandi che hanno lo stesso nome.

Tutti i passaggi sono stati personalmente provati durante la stesura dell’articolo.

Se trovate imprecisioni o errori, fatemi sapere.

Uno per tutti: mv.

Per rinominare un documento utilizzando la linea di comando in GNU/Linux si usa, in genere, il comando mv, ovvero move e tale comando ha un comportamento univoco in tutte le distribuzioni.

In pratica il comando mv muove il documento dal vecchio nome al nuovo nome e tale operazione viene eseguita in modo omogeneo nelle varie distribuzioni.

La sintassi è semplicissima: mv old-name new-name.

Ma non è l’unico comando per questa operazione.

Ci sono altri comandi ad iniziare da rename.

Il comando rename: qui iniziano i problemi!

In molte distribuzioni è disponibile il comando rename che estende la funzionalità di rinomina dei documenti mediante l’utilizzo di modelli.

Il comportamento di tale comando, tuttavia, non è univoco.

Nelle versioni di Ubuntu precedenti alla n. 22 era presente un comando denominato rename-ul installato con il pacchetto util-linux. Tale comando non era compatibile con le espressioni regolari.

L’attuale versione del comando rename in Ubuntu e Debian è, invece, compatibile con le espressioni regolari e si installa con sudo apt install rename.

Quindi: nelle distribuzioni Debian, Ubuntu e derivate, il comando rename consente l’utilizzo delle “espressioni regolari”.

Un comando con lo stesso nome è presente anche negli archivi di installazione di Fedora e Arch ma ha un comportamento differente in quanto non è compatibile con le “espressioni regolari”.

In pratica il comando rename presente in Fedora ed Arch ha un comportamento analogo al vecchio rename-ul un tempo presente in Debian e Ubuntu.

Per avere un comando compatibile con le espressioni regolari occorre installare il comando prename in Fedora e perl-rename in Arch Linux.

Quindi, riassumendo:

  • In Debian ed Ubuntu, installate qualche anno fa e aggiornate di volta in volta, potreste trovare ancora installato il comando rename-ul non compatibile con le espressioni regolari
  • L’attuale comando rename in Debian e Ubuntu è, invece, compatibile con le espressioni regolari.
  • Il comando rename in Fedora e Arch non è compatibile con le espressioni regolari.
  • Il comando equivalente compatibile con le espressioni regolari è prename per Fedora e perl-rename per Arch.

Come si comporta il comando “rename” NON compatibile con le espressioni regolari?

Il comando rename presente in Fedora e Arch che, poi, è lo stesso a suo tempo denominato rename-ul presente in Debian e Ubuntu, consente di effettuare operazioni su basi documentali multiple mediante l’utilizzo di “modelli” ma senza l’utilizzo delle espressioni regolari.

Lo schema sintattico di base è il seguente:

rename [options] <pattern> <replacement> <file(s)>

Ad esempio: per sostituire l’estensione .txt con l’estensione .bak su tutti i documenti di testo si usa la seguente formulazione:

rename  .txt .bak *.txt

Pertanto rename è, già, molto versatile ma, nella versione di Fedora e Arch, non supporta la potenza delle espressioni regolari, ovvero del meta-linguaggio di eccellenza per operare su stringhe di testo.

I comandi compatibili con le “espressioni regolari”

In varie distribuzioni esistono comandi compatibili con le espressioni regolari di Perl variamente denominati: in Debian e Ubuntu il comando è rename; in Arch Linux è perl-rename; in Fedora è prename.

L’installazione è molto semplice per ciascuna distribuzionie:

  • Per Debian e Ubuntu: sudo apt install rename.
  • Per Fedora: sudo dnf install prename.
  • Per Arch: sudo pacman -S perl-rename o, per chi lo usa, yay -S perl-rename.

La compatibilità con le espressioni regolari avviene con riferimento al comando sed di Linux.

Il comando “sed” in GNU/Linux

Il comando sed (stream editor) di GNU/Linux viene utilizzato per la sostituzione di stringhe di testo all’interno dei documenti.

Il comando opera non sul nome dei documenti ma all’interno di essi.

Una tipica formula di sed è la seguente:

$sed 's/old_name/new_name/' file_object

Il risultato viene presentato nella linea di comando e può, ovviamente, essere reindirizzato in un separato documento con l’operatore > della linea di comando Linux.

Lo stesso procedimento può essere utilizzato per i nomi dei documenti ma l’operatore non può essere il comando sed bensì un comando espressamente dedicato allla modifica a livello di nome e non di contenuto.

I comandi rename di Debian e Ubuntu, prename in Fedora e perl-rename in Arch utilizzano, appunto, una struttura sed-like.

Utilizzo dei comandi compatibili con le espressioni regolari.

Lo schema fondamentale di rename, in versione Debian e Ubuntu, prename in Fedora e perl-rename in Arch è il seguente:

nome-comando 's/old_name/new_name/' file(s)

Ad esempio, per sostituire l’estensione .txt con l’estensione .bak su tutti i documenti di testo si usa la seguente espressione regolare (a seconda delle varie distribuzioni):

- rename 's/\.txt$/.bak/' *.txt
- prename 's/\.txt$/.bak/' *.txt
- perl-rename 's/\.txt$/.bak/' *.txt

Spero di avere chiarito questa potenziale confusioni tra comandi per rinominare i documenti in diverse distribuzioni di GNU/Linux.

Grazie per l’attenzione.

Avvocato

Loquimur