web-dev-qa-db-fra.com

Comment renommer tous les fichiers en minuscule?

J'ai par exemple TREE.wav, ONE.WAV. Je veux le renommer en tree.wav, one.wav. Comment renommer tous les fichiers en minuscule? 

98
Voloda2

Si vous êtes à l'aise avec le terminal:

  1. Ouvrez Terminal.app, tapez cd, puis faites glisser le dossier contenant les fichiers à renommer dans la fenêtre.
  2. Pour confirmer que vous êtes dans le bon répertoire, tapez ls et appuyez sur Entrée.
  3. Collez ce code et appuyez sur Entrée:

    for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
    
  4. Pour confirmer que tous vos fichiers sont en minuscule, tapez ls et appuyez à nouveau sur Entrée.

(Merci à @bavarious sur Twitter pour quelques corrections, et à John Whitley ci-dessous pour avoir rendu ce système plus sûr pour les systèmes de fichiers insensibles à la casse.)

321
wjl

La question posée est à la fois générale et importante. Je souhaite donc donner une réponse plus générale:

Cas le plus simple (sûr la plupart du temps, et sur Mac OS X, mais continuez à lire):

for i in * ; do j=$(echo "$i" | tr '[:upper:]' '[:lower:]') ; mv "$i" "$j" ; done

Vous devez également gérer les espaces dans les noms de fichiers (tous les systèmes d'exploitation):

IFS=$'\n' ; for i in * ; do j=$(echo "$i" | tr '[:upper:]' '[:lower:]') ; mv "$i" "$j" ; done

Vous devez gérer en toute sécurité les noms de fichiers qui ne diffèrent que par la casse dans un système de fichiers sensible à la casse et ne pas écraser la cible (par exemple, Linux):

for i in * ; do j=$(echo "$i" | tr '[:upper:]' '[:lower:]') ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done 

Note sur Mac OS X:

Le système de fichiers Mac est insensible à la casse et le préserve.

Il n'est toutefois pas nécessaire de créer des fichiers temporaires, comme le suggèrent la réponse acceptée et les commentaires, car deux noms de fichiers ne différant que par les cas ne peuvent pas exister, ref .

Pour montrer ceci:

$ mkdir test
$ cd test
$ touch X x
$ ls -l 
total 0
-rw-r--r--  1 alexharvey  wheel  0 26 Sep 20:20 X
$ mv X x
$ ls -l 
total 0
-rw-r--r--  1 alexharvey  wheel  0 26 Sep 20:20 x
0
Alex Harvey