# \[Résolu\] AWK pour renomer plein de fichiers

**URL:** <https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 9:33 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939 "2016-02-20T21:33:25Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![FSR](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/a183cd/32.png) [@FSR](https://www.debian-fr.org/u/FSR)\
**Post date:** [Février 20, 2016, 9:33 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/1 "2016-02-20T21:33:25Z")

</div>

Bonjour,

Je cherche à renommer plein de fichier qui viennent de Windows  
je fais un ls -alR | awk '{gsub(/é/, “e”); print $0}'  
j’ai bien une liste des fichiers sans le caractère “é”

2 problèmes à cela:

- je n’arrive pas à le combiner avec un  
mv old\_name new\_name
- Je pense qu’en passant par les expressions régulières du type  
[éèë] vers [eee\_]  
ça devrait être beaucoup plus efficace

Mais la non plus, j’y arrive pas  
Si quelqu’un a une idée, je suis preneur  
Merci A+

---

<div class="post-metadata">

**Author:** ![micky979](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/d9b06d/32.png) [@micky979](https://www.debian-fr.org/u/micky979)\
**Post date:** [Février 20, 2016, 9:33 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/2 "2016-02-20T21:33:27Z")

</div>

Bonjour,

Quelques choses comme ceci devrait t’aider mais ce n’est pas avec awk :

`find . -type f | while read i
do
   printf "${i}\n" | egrep -q [éêëè] 
   if [$? -eq 0]
   then
      if [-e "$(printf "${i}\n" | sed 's/[éêëè]/e/'g)" ]
      then
         printf "Impossible de renommer ${i}. Le fichier existe deja.\n"
      else
         mv "${i}" "$(printf "${i}\n" | sed 's/[éêëè]/e/'g)"
      fi
   fi
done`

---

<div class="post-metadata">

**Author:** ![FSR](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/a183cd/32.png) [@FSR](https://www.debian-fr.org/u/FSR)\
**Post date:** [Février 20, 2016, 9:33 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/3 "2016-02-20T21:33:33Z")

</div>

Salut micky979

Ton code fonctionne très bien pour le "e"  
je l’ai modifié pour plein d’autres lettres de la façon suivante:

[code]#!/bin/sh  
ls | while read i  
do  
printf “${i}\n” | egrep -q [éêëè]  
if [$? -eq 0]  
then  
if [-e “$(printf “${i}\n” | sed 's/[éêëè]/e/'g)” ]  
then  
printf "Impossible de renommer ${i}. Le fichier existe deja.\n"  
else  
mv “${i}” "$(printf “${i}\n” | sed 's/[éêëè]/e/'g)"  
fi  
fi

printf “${i}\n” | egrep -q [àäâ]  
if [$? -eq 0]  
then  
if [-e “$(printf “${i}\n” | sed 's/[àäâ]/a/'g)” ]  
then  
printf "Impossible de renommer ${i}. Le fichier existe deja.\n"  
else  
mv “${i}” "$(printf “${i}\n” | sed 's/[àäâ]/a/'g)"  
fi  
fi  
done[/code]

il m’a retiré les accents sur les “e” mais pas sur les “a” en m’insultant:  
mv: ne peut évaluer `étèàä.txt’: Aucun fichier ou répertoire de ce type  
parce que dans le cas des “a” le fichier a déjà été renommé "eteàä.txt"  
Normal mais alors…  
Je peux reprendre le LS mais il n’y a pas mieux???

Mais merci quand même, cela me procure une voie de sortie  
A+

---

<div class="post-metadata">

**Author:** ![FSR](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/a183cd/32.png) [@FSR](https://www.debian-fr.org/u/FSR)\
**Post date:** [Février 20, 2016, 9:33 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/4 "2016-02-20T21:33:33Z")

</div>

RE salut

En fait en mettant des ls à chaque étape, cela fonctionne;  
Mais que pour les fichiers, pas pour les répertoires  
Peut-être avec “ls -alR” en utilisant l’argument $9 à la place de “${i}\n” qui est le nom du fichier ???  
Mais j’ai peur qu’il n’apprécie pas.

bref… je coince

---

<div class="post-metadata">

**Author:** ![micky979](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/d9b06d/32.png) [@micky979](https://www.debian-fr.org/u/micky979)\
**Post date:** [Février 20, 2016, 9:33 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/5 "2016-02-20T21:33:33Z")

</div>

Bonjour,

Il y a en effet la solution de refaire la boucle avec le ls mais c’est pas tres optimiser.

Une autre solution possible :

`ls | while read i
do
   printf "${i}\n" | egrep -q [éêëèàäâ]
   if [$? -eq 0]
   then
      if [-e "$(printf "${i}\n" | sed 's/[éêëè]/e/'g | sed 's/[àäâ]/a/'g)" ]
      then
         printf "Impossible de renommer ${i}. Le fichier existe deja.\n"
      else
         mv "${i}" "$(printf "${i}\n" | sed 's/[éêëè]/e/'g | sed 's/[àäâ]/a/'g)"
      fi
   fi
done`

Ceci devrait fonctionner. Préfère le find que la commande ls pour ta recherche.

---

<div class="post-metadata">

**Author:** ![FSR](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/a183cd/32.png) [@FSR](https://www.debian-fr.org/u/FSR)\
**Post date:** [Février 20, 2016, 9:33 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/6 "2016-02-20T21:33:34Z")

</div>

Merci,  
Ta solution est… n fois plus jolie et plus efficace.  
Je teste cela demain matin.  
et je te tiens au courant  
A+

---

<div class="post-metadata">

**Author:** ![eol](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/b782af/32.png) [@eol](https://www.debian-fr.org/u/eol)\
**Post date:** [Février 20, 2016, 9:33 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/7 "2016-02-20T21:33:36Z")

</div>

Sinon,  
ce serait pas plus simple avec la commande rename?  
genre `$ rename 's/é/e/g' *`

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:33 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/8 "2016-02-20T21:33:38Z")

</div>

Voir même

```auto

```

---

<div class="post-metadata">

**Author:** ![BBT1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/ecc23a/32.png) [@BBT1](https://www.debian-fr.org/u/BBT1)\
**Post date:** [Février 20, 2016, 9:33 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/9 "2016-02-20T21:33:43Z")

</div>

Ah merci je ne connaissais pas rename.  
Il y a aussi mmv qui a l’air pas mal.

Je crois qu’un certain nombre de mes scripts vont devenir plus courts 😉

---

<div class="post-metadata">

**Author:** ![FSR](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/a183cd/32.png) [@FSR](https://www.debian-fr.org/u/FSR)\
**Post date:** [Février 20, 2016, 9:34 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/10 "2016-02-20T21:34:25Z")

</div>

bonjour à tous  
Je m’excuse pour mon retard à répondre… des imprévus…  
Je viens d’essayer les scripts rename.  
Pour un caractère, impec  
Pour plusieurs caracteres, il veux rien savoir.  
N’y a-t-il pas un problème de version pour rename???  
A+

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:34 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/11 "2016-02-20T21:34:27Z")

</div>

Tu as fais comment ? Comme ça ?

```auto

```

---

<div class="post-metadata">

**Author:** ![FSR](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/a183cd/32.png) [@FSR](https://www.debian-fr.org/u/FSR)\
**Post date:** [Février 20, 2016, 9:34 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/12 "2016-02-20T21:34:27Z")

</div>

salut,  
bah je crois:

```auto
$ rename 'y/éêèàïç/eeeaic/g' **/*
Bareword found where operator expected at (eval 1) line 1, near "y/éêèàïç/eeeaic/g"
syntax error at (eval 1) line 2, near "y/éêèàïç/eeeaic/g
```

Il me semble non?  
A+

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:34 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/13 "2016-02-20T21:34:27Z")

</div>

Au temps pour moi essaie sans le g à la fin

```auto

```

Après pour le “\*\*/\*” il faut avoir zsh ou bash dans une version au moins égale à 4.

---

<div class="post-metadata">

**Author:** ![FSR](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/a183cd/32.png) [@FSR](https://www.debian-fr.org/u/FSR)\
**Post date:** [Février 20, 2016, 9:34 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/14 "2016-02-20T21:34:41Z")

</div>

Salut MisterFreez

En effet, sans le g la commande passe sans erreur.  
Mais elle ne fait rien.  
J’ai essayé avec un fichier étè.txt et avec un répertoire étè

```auto
franck@PC3:~$ ls | grep é
étè
étè.doc
fsr@PC3:~$ 
rename 'y/éêèàïç/eeeaic/' **/*
Can't rename étè/eetece�ec.txt eetec/eetece�ec.txt: Aucun fichier ou répertoire de ce type
franck@PC3:~$ ls | grep é
étè
étè.doc
fsr@PC3:~$ 
fsr@PC3:~$ uname -r
2.6.26-2-686
```

et puis c’est tout!  
snif snif

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:34 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/15 "2016-02-20T21:34:47Z")

</div>

Bizarre chez moi ça passe :

`% ls
çouçou étè ïgyt jhkdsfjhsd
% rename 'y/çéèï/ceei/' *
% ls
ceouceou cigyt citci jhkdsfjhsd`  
Si tu as juste un répertoire à faire (et pas de sous répertoire) utilise \* plutôt que \*\*/\*.

Ton problème sinon viens peut être d’un problème d’encage mais je sais pas trop comment t’aider.

---

<div class="post-metadata">

**Author:** ![FSR](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/a183cd/32.png) [@FSR](https://www.debian-fr.org/u/FSR)\
**Post date:** [Février 20, 2016, 9:34 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/16 "2016-02-20T21:34:48Z")

</div>

Salut MisterFreez

Je n’ai pas l’impression que cela fonctionne bien chez toi

çouçou donne ceouceou à la place de coucou  
étè donne cigyt à la place de ete  
ïgyt donne citci à la place de igyt

je viens d’essayer entre crochet

```auto
touch çépasgï
rename 'y/[çéèï]/[ceei]/' *
```

çépasgï donne cecipasgc] au lieu de cepasgi  
j’en conclu que dans tous les cas, cette commande donne  
pour une lettre trouvée dans le filtre d’entrée : 2 lettres  
pour ç -\> ce  
pour é -\> ci (la je comprends pas)  
pour ï -\> c] (la non plus ???)

bref… je comprends de moins en moins!  
A+

---

<div class="post-metadata">

**Author:** ![FSR](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/a183cd/32.png) [@FSR](https://www.debian-fr.org/u/FSR)\
**Post date:** [Février 20, 2016, 9:34 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/17 "2016-02-20T21:34:48Z")

</div>

Salut,  
j’ai trouvé une solution… qui vaut ce qu’elle vaut:

```auto
IFS="\n";for i in *;do mv $i $(echo $i | sed -r 's/é/e/g; s/è/e/g; s/ê/e/g; s/\?/_/g; s/\ /_/g');done 2> /dev/null
```

Cette solution remplace les accents, le caractere “?” par “_" et l’espace par "_”.  
On peut prolonger la suite…longtemps

Merci à tous

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:34 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/18 "2016-02-20T21:34:55Z")

</div>

Mon dieu je suis bigleu ! 😮

Je me permet une dernière remarque :

```auto

```

Devrais marcher (je sais pas pour le g à la fin). Si ça marche pas je jure de ne plus poster sur le forum « Programmation ».

---

<div class="post-metadata">

**Author:** ![FSR](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/a183cd/32.png) [@FSR](https://www.debian-fr.org/u/FSR)\
**Post date:** [Février 20, 2016, 9:35 UTC](https://www.debian-fr.org/t/resolu-awk-pour-renomer-plein-de-fichiers/24939/19 "2016-02-20T21:35:52Z")

</div>

Salut MisterFreez

Désolé ta solution ne fonctionne pas.  
Certes, je ne peux pas expliquer pourquoi.  
Mais que ce soit avec ou sans le g… rien  
Bon mais t’affole pas, ça fonctionne comme j’ai montré dans le post précédent.

Je penses donc le problème résolu.

Merci à tous
