Linux: rename, rename.ul, prename, perl-rename: che confusione!
1 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.
2 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
.
3 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.
4 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.
5 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.
6 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.
7 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.
Pubblicato in origine sul Sito Web di Franco Pasut
Commenti
Posta un commento