Salta al contenuto principale

mv: sposta e rinomina file e directory

Inviato da tuxsa il

mv sposta file e cartelle da un posto all'altro e serve anche a rinominarli. Su Linux non esiste un comando "rinomina" separato: spostare un file e cambiargli il nome sono la stessa operazione, e mv le fa entrambe.

Cos'è

mv è l'abbreviazione di move, "sposta". Fa parte del pacchetto GNU coreutils ed è un eseguibile (/usr/bin/mv), presente su qualsiasi distribuzione GNU/Linux.

Cosa fa

Cambia il percorso di un file o di una directory. Se origine e destinazione sono nella stessa directory, il risultato è un cambio di nome; se sono in directory diverse, è uno spostamento. Può anche fare le due cose insieme.

Quando lo spostamento avviene all'interno dello stesso file system, l'operazione è istantanea anche per cartelle enormi, perché il sistema aggiorna solo il riferimento al file e non ne copia i dati. Se invece la destinazione è su un altro disco o partizione, mv copia i dati e poi elimina l'originale, e può quindi richiedere più tempo.

Come cp, sovrascrive senza chiedere conferma se la destinazione esiste già.

Come si usa

Le due sintassi principali:

$ mv [opzioni] origine destinazione
$ mv [opzioni] origine... directory/

Esempio 1: rinominare un file

$ mv bozza.txt articolo.txt
$ ls
articolo.txt

Il file bozza.txt non esiste più: ora c'è articolo.txt, con lo stesso contenuto.

Esempio 2: spostare un file in una directory

$ mv articolo.txt pubblicati/
$ ls pubblicati
articolo.txt

La barra finale indica che pubblicati è una directory. Se non esistesse, mv rinominerebbe il file in pubblicati.

Esempio 3: spostare e rinominare insieme

$ mv bozza.txt pubblicati/articolo_2026.txt

Esempio 4: spostare più file

L'ultimo argomento è la destinazione e deve essere una directory:

$ mv foto1.jpg foto2.jpg foto3.jpg Immagini/
$ mv *.jpg Immagini/

Esempio 5: rinominare o spostare una directory

A differenza di cp, con le directory non serve nessuna opzione:

$ mv Documenti_vecchi Archivio
$ mv Archivio /home/enzo/backup/

Esempio 6: chiedere conferma prima di sovrascrivere con -i

$ mv -i appunti.txt backup/
mv: sovrascrivere 'backup/appunti.txt'? n

Con -n (no-clobber), invece, mv non sovrascrive mai i file esistenti e salta lo spostamento senza chiedere nulla.

Esempio 7: vedere cosa viene spostato con -v

$ mv -v vecchio.txt nuovo.txt
rinominato 'vecchio.txt' -> 'nuovo.txt'

Esempio 8: rinominare tanti file insieme

mv non accetta schemi del tipo "da *.txt a *.md": il carattere jolly viene espanso dalla shell prima del comando, e il risultato non è quello che ti aspetti. Per rinominare più file serve un ciclo:

$ for f in *.txt; do mv "$f" "${f%.txt}.md"; done

L'espressione ${f%.txt} toglie l'estensione .txt dal nome e il ciclo aggiunge .md. Le virgolette proteggono i nomi con spazi.

Esempio 9: uso negli script

Sposta i PDF scaricati in una cartella, senza sovrascrivere quelli già presenti:

#!/bin/bash
DEST="$HOME/elaborati"
mkdir -p "$DEST"

for f in "$HOME/Download"/*.pdf; do
    [ -e "$f" ] || continue
    mv -n "$f" "$DEST/"
done

Il controllo [ -e "$f" ] evita errori quando non ci sono PDF: in quel caso la shell lascia il carattere jolly così com'è e il ciclo proverebbe a spostare un file chiamato *.pdf.

Opzioni utili

  • -i: chiede conferma prima di sovrascrivere.
  • -n: non sovrascrive mai i file esistenti.
  • -f: sovrascrive senza chiedere, anche se esiste un alias con -i.
  • -u: sposta solo se la destinazione manca o è più vecchia dell'origine.
  • -v: mostra ogni operazione eseguita.
  • -b: prima di sovrascrivere, crea una copia di backup del file di destinazione.

Attenzione a

  • Sovrascrive in silenzio: se sposti un file sopra uno con lo stesso nome, quello vecchio è perso e non c'è modo di recuperarlo. Con file importanti usa -i o -n.
  • Non crea le directory: se la cartella di destinazione non esiste, ottieni un errore:

    $ mv appunti.txt nuova/appunti.txt
    mv: impossibile spostare 'appunti.txt' in 'nuova/appunti.txt': File o directory non esistente

    Creala prima con mkdir -p.

  • La barra finale conta: mv file cartella/ sposta il file dentro la cartella; mv file cartella dà lo stesso risultato se la cartella esiste, ma se non esiste rinomina il file. Con la barra l'intenzione è esplicita.
  • I file nascosti: mv * destinazione/ non sposta i file il cui nome inizia con il punto.
  • Permessi: per spostare un file servono i permessi di scrittura sia sulla directory di origine (perché il file ne esce) sia su quella di destinazione.
  • Su un altro disco: se l'operazione si interrompe a metà, potresti trovarti con una copia parziale. Per grandi quantità di dati conviene prima copiare, verificare e solo dopo cancellare.

Riepilogo

ComandoCosa fa
mv vecchio nuovoRinomina un file o una directory
mv file dir/Sposta un file in una directory
mv file dir/nuovoSposta e rinomina insieme
mv *.jpg dir/Sposta tutti i file corrispondenti
mv -i file dir/Chiede conferma prima di sovrascrivere
mv -n file dir/Non sovrascrive mai
mv -v vecchio nuovoMostra cosa viene fatto