Défi
Énoncé
Écrire un script bash qui parcourt tous les fichiers du répertoire courant (non récursif, pas les dossiers) et renomme chacun d'eux en remplaçant les lettres majuscules de leur nom par les minuscules correspondantes. L'extension est traitée comme le reste du nom : README.TXT devient readme.txt. Si le nom cible existe déjà (et est différent du fichier source), le script affiche un avertissement sur stderr et ignore ce fichier.
Contraintes
- Ne traiter que les fichiers ordinaires (pas les répertoires, liens symboliques, etc.).
- Utiliser
tr '[:upper:]' '[:lower:]'ou la substitution bash${var,,}pour la conversion. - Un fichier dont le nom est déjà entièrement en minuscules ne doit pas être renommé (éviter un
mvinutile). - Messages d'avertissement sur stderr, pas sur stdout.
- Compatible bash 4+ (pour
${var,,}) ou bash 3 avectr.
Exemple
Arborescence avant exécution :
Rapport.txt Notes.TXT archive.zip Config.SH
Exécution :
$ bash minuscules.sh
Arborescence après exécution :
rapport.txt notes.txt archive.zip config.sh
Si rapport.txt existait déjà avant le renommage de Rapport.txt :
avertissement : rapport.txt existe déjà, Rapport.txt ignoré