23/11/2024

Commandes et Système

La commande mv sous Linux : exemples d’utilisation

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/

Commande mv - déplacer des dossiers et fichiers sous Linux

On peut voir que ça fonctionne parfaitement :

Linux - Commande mv

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/

Commande mv avec exclusion sur un fichier

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 :

Renommer avec la commande mv

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.

Commande mv - demande de confirmation

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 !

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

4 commentaires sur “La commande mv sous Linux : exemples d’utilisation

  • Bonjour,
    Comment on déplace tout les fichiers sauf 1 fichier dans un répertoire

    Répondre
  • Bonsoir

    Merci pour l’article.
    Il y a une coquille partie C au niveau de la commande Wildcard 😉

    Répondre
    • Bonjour Djo,
      Ah oui, bien vu ! Un mauvais copier-coller… Je viens de corriger 🙂 – Merci !

      Répondre
  • 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 !

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.