126 votes

Linux - Remplacement des espaces dans les noms de fichiers

J'ai un certain nombre de fichiers dans un dossier, et je veux remplacer chaque caractère d'espace dans tous les noms de fichiers par des traits de soulignement. Comment puis-je y parvenir ?

217voto

neesh Points 2092

Cela devrait le faire :

for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done

92voto

DF. Points 101

Je préfère utiliser la commande 'rename', qui prend des regex de style Perl :

rename "s/ /_/g" *

Vous pouvez faire un essai à sec avec le drapeau -n :

rename -n "s/ /_/g" *

20voto

DigitalRoss Points 80400

Utiliser sh...

for i in *' '*; do   mv "$i" `echo $i | sed -e 's/ /_/g'`; done

Si vous voulez essayer avant d'appuyer sur la gâchette, changez simplement mv en echo mv.

6voto

javipas Points 153

Que faire si vous souhaitez appliquer la tâche de remplacement de manière récursive ? Comment ferais-tu ça ?

Je viens de trouver la réponse moi-même. Pas la solution la plus élégante, (essaie également de renommer les fichiers qui ne sont pas conformes à la condition), mais il fonctionne. (BTW, dans mon cas, j'avais besoin de renommer les fichiers avec '%20', pas avec un trait de soulignement)

#!/bin/bash
find . -type d | while read N
do
     (
           cd "$N"
           if test "$?" = "0"
           then
               for file in *; do mv "$file" ${file// /%20}; done
           fi
     )
done

5voto

Murali VP Points 2555

Si vous utilisez bash :

for file in *; do mv "$file" ${file// /_}; done

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X