Comment faire pour renommer tous les fichiers en minuscules?

j'ai par exemple L'arbre.wav, un.WAV. Je veux le renommer en arbre.wav, un.WAV. Comment faire pour renommer tous les fichiers en minuscules?

90
demandé sur Voloda2 2011-10-17 00:18:24

2 réponses

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

  1. Ouvrir Un Terminal.application, 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. coller ce code et appuyer sur enter:

    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 minuscules, tapez ls et appuyez sur Entrée à nouveau.

(merci à @bavarious sur twitter pour quelques corrections, et merci à John Whitley ci-dessous pour rendre cela plus sûr sur les systèmes de fichiers insensibles à la casse.)

292
répondu wjl 2016-06-04 07:12:01

la question telle que posée est générale, et aussi importante, donc je souhaite fournir une réponse plus générale:

le cas le plus simple (sûr la plupart du temps, et sur Mac OS X, mais lu sur):

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 (N'importe quel OS):

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 cas 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 à propos de Mac OS X:

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

il n'est cependant pas nécessaire de créer des fichiers temporaires, comme le suggèrent la réponse et les commentaires acceptés, parce que deux noms de fichier qui ne diffèrent que par cas ne peuvent pas exister en premier lieu, 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
répondu Alex Harvey 2018-09-26 10:33:40