Introduzione

La ridenominazione delle directory è una delle operazioni di base che è spesso necessario eseguire su un sistema Linux. È possibile rinominare le directory dal file manager della GUI con un paio di clic o utilizzando il terminale della riga di comando.

Questo articolo spiega come rinominare le directory usando la riga di comando e il comando mv.

Rinominare le directory

Nei sistemi operativi Linux e Unix, è possibile utilizzare il comando mv (short of move) per rinominare o spostare file e directory da una posizione a un'altra.

La sintassi del comando mv per spostare le directory è la seguente:

mv [OPTIONS] source destination

Ad esempio, per rinominare la directory dir1 come dir2 si esegue:

mv dir1 dir2

Quando si rinomina la directory, è necessario specificare esattamente due argomenti per il comando mv. Il primo argomento è il nome corrente della directory e il secondo è il nuovo nome.

È importante notare che se dir2 esiste già, dir1 viene spostato nella directory dir2.

Per rinominare una directory che non si trova nella directory di lavoro corrente, è necessario specificare il percorso assoluto o relativo:

mv /home/user/dir1 /home/user/dir2

Rinominare più directory

Rinominare una singola directory è un compito semplice, ma rinominare più directory contemporaneamente può essere una sfida, specialmente per i nuovi utenti Linux.

La ridenominazione di più directory contemporaneamente è raramente necessaria.

Rinominare più directory con mv

Il comando mv può rinominare solo un file alla volta. Tuttavia, può essere utilizzato insieme ad altri comandi come find o all'interno di loop per rinominare più file contemporaneamente.

Ecco un esempio che mostra come utilizzare il loop for in Bash  per aggiungere la data corrente ai nomi di tutte le directory nella directory di lavoro corrente:

for d in *; do 
  if [ -d "$d" ]; then
    mv -- "$d" "${d}_$(date +%Y%m%d)"
  fi
done

Analizziamo il codice riga per riga:

  • La prima riga crea un ciclo e scorre attraverso un elenco di tutti i file.
  • La seconda riga controlla se il file è una directory.
  • La terza riga aggiunge la data corrente a ciascuna directory.

Ecco una soluzione per lo stesso compito usando mv in combinazione con find:

find . -mindepth 1 -prune -type d -exec sh -c 'd="{}"; mv -- "$d" "${d}_$(date +%Y%m%d)"' \;

Il comando find passa tutte le directory a mv una a una usando l'opzione -exec. La stringa {} è il nome della directory attualmente in fase di elaborazione.

Come puoi vedere dagli esempi, rinominare più directory con mv non è un compito facile in quanto richiede una buona conoscenza degli script di Bash.

Rinominare più directory con rename

Il comando rename viene utilizzato per rinominare più file e directory. Questo comando è più avanzato di mv, in quanto richiede una conoscenza di base delle espressioni regolari.

Esistono due versioni del comando rename con sintassi diversa. Useremo la versione Perl del comando rename. I file vengono rinominati in base all'espressione regolare perl fornita.

L'esempio seguente mostra come sostituire gli spazi nei nomi di tutte le directory nella directory di lavoro corrente con caratteri di sottolineatura:

find . -mindepth 1 -prune -type d | rename 'y/ /_/'

Per sicurezza, usa l'opzione -n per stampare i nomi delle directory da rinominare senza però rinominarle.

Ecco un altro esempio che mostra come convertire i nomi di directory in minuscolo:

find . -mindepth 1 -prune -type d | rename 'y/A-Z/a-z/'

Conclusione

Ti abbiamo mostrato come usare i comandi mv per rinominare le directory.