Renommer un fichier fait partie des tâches de base à maîtriser en ligne de commande sur Linux. Hors, la tâche est relativement simple à réaliser avec un seul fichier, mais devient plus complexe lorsqu’il y en a plusieurs. Dans ce tutoriel, je vous explique comment renommer un fichier ou un répertoire sur Linux avec les commandes mv
et rename
.
Avec la commande mv
La commande mv
est l’abréviation de move en anglais. Elle permet de déplacer un fichier ou un répertoire d’un emplacement à un autre. Cette commande permet aussi de renommer un fichier, en le déplacement sous un nouveau nom. Elle est intégrée aux coreutils et donc installée par défaut.
Renommer un fichier ou un répertoire sur Linux avec mv
La syntaxe de la commande mv
pour renommer un fichier est la suivante :
mv [OPTIONS] source destination
Par exemple, pour renommer le fichier ancien_nom.txt
vers nouveau_nom.txt
, vous devez utiliser la commande suivante :
mv ancien_nom.txt nouveau_nom.txt
⚠️ Attention : La commande mv
peut écraser le fichier de destination si l’option -i n’est pas spécifiée.
Utilisez la commande ls -l
pour visualiser le résultat :
ls -l
Vous pouvez bien entendu modifier la destination du fichier, si vous souhaitez le déplacer à un autre emplacement, tout en renommant votre fichier. Par exemple :
mv /ancien/emplacement/ancien_nom.txt /nouvel/emplacement/nouveau_nom.txt
Vous pouvez utiliser mv
pour renommer un répertoire de la même manière que pour un fichier :
mv /emplacement/ancien_nom_répertoire /emplacement/nouveau_nom_répertoire
Renommer plusieurs fichiers avec mv
La commande mv
ne peut renommer qu’un seul fichier à la fois. Mais vous cherchez peut-être à renommer plusieurs fichiers en une seule fois. C’est là que ça se corse ! En effet, pour réaliser cette tâche avec mv
, vous devez l’utiliser en combinaison avec une boucle for
ou une recherche find
pour renommer plusieurs fichiers simultanément.
Par exemple, nous allons utiliser une boucle for
pour modifier l’extension de plusieurs fichiers .html
en .old
:
for f in *.html; do
mv -- "$f" "${f%.html}.old"
done
Analysons le code ligne à ligne :
- La première ligne créée une boucle
for
et itère tous les fichiers qui se terminent par l’extension.html
. - La deuxième ligne s’applique à chaque itération et renomme chaque fichier en modifiant l’extension
.html
à.old
. done
indique la fin de la boucle
Ce deuxième exemple montre le même exemple avec l’utilisation de find
en combinaison avec mv
:
find . -depth -name "*.html" -exec sh -c 'f="{}"; mv -- "$f" "${f%.html}.old"' \;
La commande find
recherche tous les fichiers se terminant par .html
dans le répertoire courant. Ensuite, -exec
exécute la commande mv
sur tous les fichiers qui correspondent à la recherche.
Comme vous pouvez le voir, l’utilisation de mv
pour renommer plusieurs fichiers n’est pas simple et nécessite de bonnes compétences en bash.
Les options courantes à utiliser avec mv
Voici quelques options à utiliser avec la commande mv
:
- -i : affiche un message d’avertissement avant d’écraser un fichier
- -f : ne demande pas de confirmation avant d’écraser. C’est un peu le comportement par défaut de
mv
. - -v : affiche ce que la commande a effectué
⚠️ Attention : Si vous utilisez les options -f et -i simultanément, la dernière option spécifiée prendra le dessus.
Pour en savoir plus sur mv
, je vous invite à taper man mv
dans votre terminal ou à consulter le manuel des coreutils.
La commande rename
pour renommer plusieurs fichiers sur Linux
rename
est une alternative à mv
pour renommer plusieurs fichiers basée sur les expressions Perl. Une fois sa syntaxe maîtrisée, elle sera plus puissante et plus simple à utiliser pour ce type d’opération.
Tout d’abord, installez le paquet rename
. Sur Debian :
sudo apt install rename
Vous pourrez ensuite utiliser rename
. Voici quelques exemples. On commence par renommer tous les fichiers .pdf en .txt situés dans un répertoire :
rename -v 's/.pdf/.txt/' *.pdf
Pour tester le résultat de la commande sans renommer vos fichiers, utilisez l’option -n :
rename -n 's/.txt/.pdf/' *.txt
Remplacer une partie d’un nom de fichier. Par exemple, « fichier » par « file » de tous les .txt :
rename -v 's/fichier/file/' *.txt
Convertir les noms de fichiers en majuscules d’un répertoire :
rename -v 'y/a-z/A-Z/' *
Convertir les noms de fichiers en minuscule d’un répertoire :
rename -v 'y/A-Z/a-z/' *