Proprio come cp per la copia e rm per l'eliminazione, Linux offre anche un comando integrato per spostare e rinominare i file. Si chiama mv . In questo articolo, discuteremo le basi di questo strumento da riga di comando utilizzando esempi di facile comprensione. Tieni presente che tutti gli esempi utilizzati in questo tutorial sono stati testati su Ubuntu 20.04 LTS.
Comando Linux mv
Come già accennato, il comando mv in Linux viene utilizzato per spostare o rinominare i file. Di seguito è riportata la sintassi del comando:
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
Ed ecco cosa dice la pagina man a riguardo:
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
I seguenti esempi in stile domande e risposte ti daranno un'idea migliore di come funziona questo strumento.
Q1. Come utilizzare il comando mv in Linux?
Se vuoi semplicemente rinominare un file, puoi usare il comando mv nel modo seguente:
mv [filename] [new_filename]
Ad esempio:
mv names.txt fullnames.txt
Allo stesso modo, se il requisito è spostare un file in una nuova posizione, utilizzare il comando mv nel modo seguente:
mv [nomefile] [dir-destinazione]
Ad esempio:
mv fullnames.txt /home/himanshu/Downloads
Q2. Come assicurarsi che mv richieda prima di sovrascrivere?
Per impostazione predefinita, il comando mv non viene visualizzato quando l'operazione prevede la sovrascrittura di un file esistente. Ad esempio, lo screenshot seguente mostra che il file full_names.txt esistente è stato sovrascritto da mv senza alcun avviso o notifica.
Tuttavia, se lo desideri, puoi forzare mv a richiedere utilizzando -i opzione della riga di comando.
mv -i [nome_file] [nuovo_nome_file]
Quindi gli screenshot sopra mostrano chiaramente che -i porta a mv che chiede il permesso dell'utente prima di sovrascrivere un file esistente. Tieni presente che nel caso in cui desideri specificare esplicitamente che non desideri che mv richieda prima di sovrascrivere, utilizza -f opzione della riga di comando.
Q3. Come fare in modo che mv non sovrascriva un file esistente?
Per questo, devi usare -n opzione della riga di comando.
mv -n [filename] [new_filename]
Lo screenshot seguente mostra che l'operazione mv non è andata a buon fine poiché esisteva già un file con il nome 'full_names.txt' e il comando conteneva l'opzione -n.
Nota:
If you specify more than one of -i, -f, -n, only the final one takes effect.
Q4. Come fare in modo che mv rimuova le barre finali (se presenti) dall'argomento sorgente?
Per rimuovere eventuali barre finali dagli argomenti di origine, utilizza il --strip-trailing-slashes opzione della riga di comando come mostrato di seguito.
mv --strip-trailing-slashes [source] [dest]
Ecco come la documentazione ufficiale spiega l'utilità di questa opzione:
This is useful when a source argument may have a trailing slash and specify a symbolic link to a directory. This scenario is in fact rather common because some shells can automatically append a trailing slash when performing file name completion on such symbolic links. Without this option, mv
, for example, (via the system’s rename function) must interpret a trailing slash as a request to dereference the symbolic link and so must rename the indirectly referenced directory and not the symbolic link. Although it may seem surprising that such behavior be the default, it is required by POSIX and is consistent with other parts of that standard.
Q5. Come fare in modo che mv tratti la destinazione come un file normale?
Per essere sicuro che l'entità di destinazione sia trattata come un file normale (e non una directory), usa il -T opzione della riga di comando.
mv -T [source] [dest]
Ecco perché esiste questa opzione della riga di comando:
This can help avoid race conditions in programs that operate in a shared area. For example, when the command ‘mv /tmp/source /tmp/dest’ succeeds, there is no guarantee that /tmp/source was renamed to /tmp/dest: it could have been renamed to/tmp/dest/source instead, if some other process created /tmp/dest as a directory. However, if mv -T /tmp/source /tmp/dest succeeds, there is no question that/tmp/source was renamed to /tmp/dest.
In the opposite situation, where you want the last operand to be treated as a directory and want a diagnostic otherwise, you can use the --target-directory (-t) option.
Q6. Come fare in modo che mv muova il file solo quando è più nuovo del file di destinazione?
Supponiamo che esista un file chiamato fullnames.txt nella directory Downloads del tuo sistema e che ci sia un file con lo stesso nome nella tua home directory. Ora vuoi aggiornare ~/Downloads/fullnames.txt con ~/fullnames.txt, ma solo quando quest'ultimo è più recente. Quindi, in questo caso, dovrai utilizzare -u opzione della riga di comando.
mv -u ~/fullnames.txt ~/Downloads/fullnames.txt
Questa opzione è particolarmente utile nei casi in cui è necessario prendere tali decisioni dall'interno di uno script di shell.
Q7. In che modo mv emette i dettagli di tutto ciò che sta facendo?
Se vuoi che mv emetta informazioni che spieghino esattamente cosa sta facendo, usa -v opzione della riga di comando.
mv -v [filename] [new_filename]
Ad esempio, le schermate seguenti mostrano mv che emette alcuni dettagli utili su ciò che ha fatto esattamente.
Q8. Come forzare mv a creare un backup dei file di destinazione esistenti?
Puoi farlo usando il -b opzione della riga di comando. Il file di backup creato in questo modo avrà lo stesso nome del file di destinazione, ma con una tilde (~) aggiunta. Ecco un esempio:
Conclusione
Come avrai già intuito, mv è importante quanto cp e rm per le funzionalità che offre:anche rinominare/spostare i file è una delle operazioni di base. Abbiamo discusso la maggior parte delle opzioni della riga di comando offerte da questo strumento. Quindi puoi semplicemente esercitarti e iniziare a usare il comando. Per saperne di più su mv, vai alla sua pagina man.