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.

