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.txtIl 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.txtLa 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.txtEsempio 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'? nCon -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"; doneL'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/"
doneIl 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
-io-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 esistenteCreala prima con
mkdir -p.- La barra finale conta:
mv file cartella/sposta il file dentro la cartella;mv file cartelladà 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
| Comando | Cosa fa |
|---|---|
mv vecchio nuovo | Rinomina un file o una directory |
mv file dir/ | Sposta un file in una directory |
mv file dir/nuovo | Sposta 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 nuovo | Mostra cosa viene fatto |