Renommer automatiquement des fichiers sous Linux avec un script Bash

Renommer automatiquement des fichiers sous Linux avec un script Bash

Quand on travaille avec des centaines d’images ou de fichiers (SEO, e-commerce, médias…), avoir des noms propres est essentiel :

  • ❌ Accents (é, à, ç)
  • ❌ Espaces
  • ❌ Caractères spéciaux
  • ❌ Majuscules incohérentes

Tout ça peut nuire au SEO, casser des URL, ou poser problème sur certains serveurs.

Heureusement, il existe une solution simple et puissante : un script Bash automatisé.

Le script complet

Voici le script que tu utilises :

find . -maxdepth 1 -type f | while read file; do
  dir=$(dirname "$file")
  base=$(basename "$file")
  name="${base%.*}"
  ext="${base##*.}"

  new=$(printf '%s' "$name" \
    | iconv -f UTF-8 -t ASCII//TRANSLIT \
    | tr '[:upper:]' '[:lower:]' \
    | sed -E 's/[[:space:]]+/-/g' \
    | sed -E 's/[.]+/-/g' \
    | sed -E 's/[^a-z0-9_-]+/-/g' \
    | sed -E 's/-+/-/g' \
    | sed -E 's/^[-_]+|[-_]+$//g')

  newfile="$dir/$new.$ext"

  if [ "$file" != "$newfile" ]; then
    mv -n "$file" "$newfile"
    echo "$base -> $(basename "$newfile")"
  fi
done

À quoi sert ce script ?

Ce script permet de :

Supprimer les accents
Transformer en minuscules
Remplacer les espaces par des tirets
Nettoyer les caractères spéciaux
Garder une structure SEO-friendly

Exemple :Photo été 2024.JPG devient :photo-ete-2024.jpg

Explication simple (ligne par ligne)

1. Recherche des fichiers

find . -maxdepth 1 -type f

Cherche tous les fichiers dans le dossier actuel (sans sous-dossiers)

2. Boucle sur chaque fichier

while read file; do

Traite les fichiers un par un

3. Récupération des infos

dir=$(dirname "$file")
base=$(basename "$file")
name="${base%.*}"
ext="${base##*.}"

On découpe :

  • dossier
  • nom du fichier
  • nom sans extension
  • extension

4. Nettoyage du nom

Suppression des accents

iconv -f UTF-8 -t ASCII//TRANSLIT

« é » → « e »


Passage en minuscules

tr '[:upper:]' '[:lower:]'

« IMAGE.JPG » → « image.jpg »

Remplacement des espaces

sed -E 's/[[:space:]]+/-/g'

« mon image » → « mon-image »

Remplacement des points

sed -E 's/[.]+/-/g'

évite les erreurs SEO / URL

Suppression caractères spéciaux

sed -E 's/[^a-z0-9_-]+/-/g'

garde uniquement :

  • lettres
  • chiffres
  • tirets
  • underscores

Nettoyage des tirets multiples

sed -E 's/-+/-/g'

« image—test » → « image-test »

 Suppression des tirets au début/fin

sed -E 's/^[-_]+|[-_]+$//g'

« -image- » → « image »

5. Création du nouveau nom

newfile="$dir/$new.$ext"

6. Renommage sécurisé

mv -n "$file" "$newfile"

-n = ne remplace pas si le fichier existe déjà

 7. Affichage

echo "$base -> $(basename "$newfile")"

Affiche les changements

Pourquoi c’est ultra puissant ?

Ce script est parfait pour :

SEO images

  • Google préfère : depannage-auto-paris.jpg
  • plutôt que : IMG_8392.JPG

Sites web (WordPress, Astro, etc.)

  • URLs propres
  • Meilleur référencement
  • Moins d’erreurs serveur

Gain de temps énorme

Au lieu de renommer 200 fichiers à la main :

1 seule commande = tout est clean

Conseils importants

Toujours tester avant

Ajoute un echo au lieu de mv :

echo mv "$file" "$newfile"

Pour voir ce qui va se passer

Faire une sauvegarde

Toujours copier tes fichiers avant :

cp -r images images_backup

Tester sur un petit dossier

Amélioration possible (niveau pro)

Tu peux ajouter :

  • Numérotation automatique
  • Sous-dossiers
  • Export CSV des changements
  • IA pour renommer intelligemment (SEO)

Conclusion

Ce script est une arme ultra puissante pour :

  • nettoyer des fichiers
  • améliorer ton SEO
  • automatiser ton workflow sur Plesk / Linux

Simple, rapide, efficace.