Comment renommer tous les fichiers d’un répertoire sur la base d’un préfixe et d’un numéro de séquence en Bash

par

dans

Contexte

Voici un script pour renommer tous les fichiers d’un répertoire vers le format « PREFIXE-NUMERO-NomFichierOriginal.extension ».

Le répertoire dans lequel renommer les fichiers, le préfixe et le numéro de départ pourront être choisis à l’exécution en fournissant des paramètres sur la ligne de commande.

En considérant que l’on part de la situation suivante :

$ ls -l
total 0
-rw-r--r-- 1 user user 0 2 mars 11:22 ma-video.mkv
-rw-r--r-- 1 user user 0 2 mars 11:22 mon-fichier.txt
-rw-r--r-- 1 user user 0 2 mars 11:22 mon-image.jpg

Le script fourni ci-dessous vous permettra d’arriver au résultat :

$ ls -l
total 0
-rw-r--r-- 1 user user 0 2 mars 11:36 PREFIXE-10-ma-video.mkv
-rw-r--r-- 1 user user 0 2 mars 11:36 PREFIXE-11-mon-fichier.txt
-rw-r--r-- 1 user user 0 2 mars 11:36 PREFIXE-12-mon-image.jpg

Le code

Voici le script en question (de mon côté je l’ai nommé rename.sh, mais vous pouvez tout à fait choisir un autre nom) :

#!/bin/bash

# Vérifie si on a bien reçu nos paramètres
if [[ $# -ne 3 ]]; then
    echo "Veuillez fournir un répertoire, un préfixe et un numéro de départ."
    exit 1
fi

# Récupère les arguments passé à la ligne de commande
DIRECTORY=$1
PREFIX=$2
i=$3

# On se déplace dans le répertoire indiqué
cd "$DIRECTORY"

# On itère sur chaque élément contenu dans notre répertoire
for FILE in *; do
    # Si c'est un fichier, on le renomme avec le nouveau format
    if [ -f "$FILE" ]; then
        NEWFILE="$PREFIX-$i-$FILE"
        echo "Renomme le fichier : $FILE $NEWFILE"
        mv -v "$FILE" "$NEWFILE"
        ((++i))
    fi
done

Le résultat

Voici le résultat sur notre répertoire d’exemple :

$ ls -l
total 0
-rw-r--r-- 1 user user 0 2 mars 11:36 ma-video.mkv
-rw-r--r-- 1 user user 0 2 mars 11:36 mon-fichier.txt
-rw-r--r-- 1 user user 0 2 mars 11:36 mon-image.jpg

$ bash /tmp/rename.sh /tmp/exemple PREFIXE 10
Renomme le fichier : ma-video.mkv PREFIXE-10-ma-video.mkv
renommé 'ma-video.mkv' -> 'PREFIXE-10-ma-video.mkv'
Renomme le fichier : mon-fichier.txt PREFIXE-11-mon-fichier.txt
renommé 'mon-fichier.txt' -> 'PREFIXE-11-mon-fichier.txt'
Renomme le fichier : mon-image.jpg PREFIXE-12-mon-image.jpg
renommé 'mon-image.jpg' -> 'PREFIXE-12-mon-image.jpg'

$ ls -l
total 0
-rw-r--r-- 1 user user 0 2 mars 11:36 PREFIXE-10-ma-video.mkv
-rw-r--r-- 1 user user 0 2 mars 11:36 PREFIXE-11-mon-fichier.txt
-rw-r--r-- 1 user user 0 2 mars 11:36 PREFIXE-12-mon-image.jpg

Commentaires

Laisser un commentaire

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