La commande mv sous Linux : exemples d’utilisation
Sommaire
- I. Présentation
- II. Utilisation de la commande mv
- B. Déplacer un dossier vers un autre dossier
- C. Déplacer plusieurs fichiers vers un dossier
- D. Déplacer plusieurs dossiers vers un autre dossier
- E. Déplacer tout le contenu d'un dossier
- F. Déplacer un fichier si la source est plus récente
- G. Déplacer tous les fichiers d'un dossiers sauf un fichier spécifique
- H. Renommer un fichier ou un dossier
- I. Demande de confirmation avec la commande mv
- J. Commande mv : ne pas écraser les fichiers existants
- III. Conclusion
I. Présentation
Sous Linux, la commande "mv" qui signifie "move" sert à déplacer des éléments (fichiers et dossiers) d'une source vers une destination. Cette commande sert aussi à renommer un élément. Pour faire une copie d'un fichier ou d'un dossier, on utilisera plutôt la commande cp.
C'est une commande très pratique et je dirais même qu'elle fait partie des commandes incontournables sous Linux ! C'est une commande native sur toutes les distributions, que ce soit sur Debian, Ubuntu, Rocky Linux, etc.... D'où l'intérêt de vous la présenter dans cet article à travers divers exemples. Pour ma part, je manipule sur une machine sous Debian 11.
Version initiale de l'article : 11 juillet 2012
II. Utilisation de la commande mv
A. Déplacer un fichier vers un autre dossier
Puisque la commande mv sert à déplacer des éléments, commençons par déplacer un fichier vers un autre dossier. Autrement dit, c'est comme si on faisait un "couper-coller". On commence par créer un fichier nommé "it-connect.txt" dans "/home/flo" et qui va servir de cobaye.
cd /home/flo touch it-connect.txt
Pour déplacer le fichier it-connect.txt vers le répertoire "/tmp", on exécute :
mv it-connect.txt /tmp/
Nous pouvons aussi préciser le chemin complet :
mv /home/flo/it-connect.txt /tmp/
On peut voir que ça fonctionne parfaitement :
B. Déplacer un dossier vers un autre dossier
La commande mv peut aussi déplacer des dossiers complets, c'est-à-dire le dossier avec son contenu. Toujours dans "/home/flo", on crée un répertoire nommé "data", puis un fichier "it-connect.txt" à l'intérieur.
mkdir data touch data/it-connect.txt
Ensuite, on déplace ce répertoire vers /tmp/ :
mv /home/flo/data/ /tmp/
Vous voyez, la syntaxe n'est pas plus compliquée. Puisqu'il s'agit d'un dossier, il y a un "/" à la fin du chemin de la source.
C. Déplacer plusieurs fichiers vers un dossier
Plutôt que d'enchaîner plusieurs fois la commande mv, on peut déplacer plusieurs fichiers en une seule fois. Commençons par créer 3 fichiers :
touch it-connect1.txt it-connect2.txt it-connect3.txt
Ensuite, on peut déplacer ces trois fichiers vers "/tmp/" comme ceci :
mv it-connect1.txt it-connect2.txt it-connect3.txt /tmp/
Pour que ce soit plus rapide à saisir, on peut utiliser le caractère wildcard ("*") pour prendre tous les fichiers correspondants à ce filtre. Ainsi, grâce à la commande ci-dessous, on cible tous les éléments dont le nom commence par "it-connect".
mv it-connect* /tmp/
D. Déplacer plusieurs dossiers vers un autre dossier
Dans le même esprit, on peut déplacer plusieurs dossiers vers un autre dossier. On peut créer deux dossiers avec mkdir :
mkdir data1 data2
Puis, on déplace ces deux dossiers vers le répertoire "/tmp/" :
mv data1/ data2/ /tmp/
E. Déplacer tout le contenu d'un dossier
Parfois, on veut déplacer tout le contenu d'un dossier, c'est-à-dire tous les fichiers qu'il contient, ainsi que tous les sous-dossiers et leurs fichiers, sans pour autant toucher au répertoire source.
Dans cet exemple, on crée un dossier nommé "data1", qui contient un fichier et un sous-dossier, qui contient lui même un fichier. L'objectif est de déplacer le contenu de "data1" vers "/tmp/".
mkdir data1 mkdir data1/photos touch data1/it-connect.txt touch data1/photos/logo.png
Au moment de déplacer le contenu avec la commande mv, on ne précise pas simplement "data1/", sinon on va déplacer le dossier en lui-même. Ici, on précise un astérisque après le "/" pour spécifier que c'est le contenu que l'on souhaite déplacer, puis on indique le répertoire cible.
mv data1/* /tmp/
Dans ce cas présent, le nouveau chemin d'accès du répertoire "photos" sera "/tmp/photos".
F. Déplacer un fichier si la source est plus récente
La commande mv contient différentes commandes plutôt cool... Nous allons en utiliser quelques-unes. Par exemple, l'option "-u" permet de déplacer un fichier uniquement si le fichier source est plus récent que le fichier de destination. Bien sûr, cela s'applique dans le cas où le fichier de destination existe déjà.
Voici un exemple :
mv -u /home/flo/it-connect.txt /tmp/it-connect.txt
G. Déplacer tous les fichiers d'un dossiers sauf un fichier spécifique
Avant de voir d'autres options, regardons un cas très particulier : nous souhaitons déplacer tout le contenu d'un répertoire, à l'exception d'un seul fichier. La commande mv ne dispose pas d'options pour faire une exclusion, mais on peut ruser en utilisant une autre commande... Plusieurs solutions sont possibles. Voici un exemple basé sur la commande ls.
On crée trois fichiers :
touch it-connect1.txt it-connect2.txt it-connect3.txt
Maintenant, on va tout déplacer sauf le fichier "it-connect2.txt" ! Ce qui donne :
mv $(ls --ignore=it-connect2.txt)
Ainsi, tout le contenu sera copié sauf ce fichier ! On peut ajouter d'autres exclusions les unes à la suite des autres :
mv $(ls --ignore=it-connect2.txt --ignore=it-connect1.txt) /tmp/
H. Renommer un fichier ou un dossier
Voyons comment renommer un élément avec la commande mv, que ce soit un fichier ou un dossier. Commençons par créer un fichier :
touch it-connect.txt
On décide de renommer le fichier "it-connect.txt" en "it-connect.txt.old". C'est comme si on déplaçait le fichier au même endroit, en changeant son nom.
mv it-connect.txt it-connect.txt.old
Exemple en image :
Pour un dossier, c'est le même principe si ce n'est que l'on retrouve le "/" à la fin du nom comme pour les cas précédents.
mkdir data2021 mv data2021/ data2022/
I. Demande de confirmation avec la commande mv
Dans le cas où il y a un conflit, c'est-à-dire que le fichier de destination existe déjà, la commande mv ne se pose pas de question : elle écrase le fichier de destination. Néanmoins, on peut ajouter l'option "-i" pour qu'une demande de confirmation soit affichée en cas de conflit.
On crée le même fichier à deux emplacements différents :
touch /tmp/it-connect.txt touch /home/flo/it-connect.txt
Ensuite, on déplace le fichier d'un emplacement vers l'autre, en ajoutant l'option "-i".
mv -i /home/flo/it-connect.txt /tmp/it-connect.txt
La commande mv indique un message et nous demande de faire un choix :
mv : voulez-vous écraser '/tmp/it-connect.txt' ?
Ouf ! Je n'étais pas loin d'effacer un fichier critique...! Le fait d'écraser automatiquement peut être pratique, dans un script par exemple, mais cela peut aussi être dangereux donc cette option est à connaître.
J. Commande mv : ne pas écraser les fichiers existants
En cas de conflit, on peut faire en sorte de ne pas écraser le fichier de destination, sans avoir à le préciser manuellement. Ainsi, on inverse le mode de fonctionnement par défaut. Il suffit d'ajouter l'option "-n" :
mv -n /home/flo/it-connect.txt /tmp/it-connect.txt
Dans le cas d'un conflit, l'opération sera annulée. Aucune information ne sera précisée dans la console.
III. Conclusion
Grâce à ce tutoriel, vous avez suffisamment d'exemples pour maîtriser la commande mv sous Linux et déplacer vos fichiers et dossiers !
Bonjour,
Comment on déplace tout les fichiers sauf 1 fichier dans un répertoire
Bonsoir
Merci pour l’article.
Il y a une coquille partie C au niveau de la commande Wildcard 😉
Bonjour Djo,
Ah oui, bien vu ! Un mauvais copier-coller… Je viens de corriger 🙂 – Merci !
Bonjour Florian,
je débute dans le bash et viens de lire, expérimenter et appliquer votre tuto « mv ». Excellent, très clair, bravo !
MAIS je tombe sur un problème avec une commande du type « cd / » suivie de « sudo mv /tmp/h/* /home/corinne/ »
Je ne parviens pas à copier les fichier cachés (qui commencent par « . »), il doit y avoir une solution …
Merci de bien vouloir me l’indiquer, ce ne doit pas être bien sorcier pour un pro !
Merci et à bientôt !