# Renommer des fichiers contenant \[ \] dans le nom

**URL:** <https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370>\
**Category:** Programmation\
**Created:** [Décembre 29, 2023, 4:28 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370 "2023-12-29T16:28:38Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![RG88](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/c5a1d2/32.png) [@RG88](https://www.debian-fr.org/u/RG88)\
**Post date:** [Décembre 29, 2023, 4:28 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/1 "2023-12-29T16:28:38Z")

</div>

Bonjour,  
Voila j’ai des fichiers de ce type : «&nbsp;fichier134\_[bazar].mp4&nbsp;» que je voudrais transformer en : «&nbsp;fichier134\_.mp4&nbsp;» donc simplement enlever les [] et ce qu’ils contiennent…  
Je n’arrive pas a utiliser la fonction rename pour ca. Peut etre y a mieux ?!  
Merci

---

<div class="post-metadata">

**Author:** ![nicola](https://www.debian-fr.org/user_avatar/www.debian-fr.org/nicola/32/8969_2.png) [@nicola](https://www.debian-fr.org/u/nicola)\
**Post date:** [Décembre 29, 2023, 4:40 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/2 "2023-12-29T16:40:57Z")

</div>

krename ?

---

<div class="post-metadata">

**Author:** ![RG88](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/c5a1d2/32.png) [@RG88](https://www.debian-fr.org/u/RG88)\
**Post date:** [Décembre 29, 2023, 4:45 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/3 "2023-12-29T16:45:08Z")

</div>

non simplement rename

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Décembre 29, 2023, 4:57 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/4 "2023-12-29T16:57:25Z")

</div>

te fauit une ligne de colmmande plus complexe que rename simplement.  
Il te faut être plus précis: quel est la structure du nom du fichier?  
QEst-ce:

- Fichier134\_[.\*].mp’ ?
- fichier\*\_[\*].mp4?  
Etc…

rename ne permet pas d’utiliser des regexp donc il faut scripter (deux ou trois lignes tout au plus).

_`ce qui s'exprime clairement se comprend aisément `_ 😉

---

<div class="post-metadata">

**Author:** ![nicola](https://www.debian-fr.org/user_avatar/www.debian-fr.org/nicola/32/8969_2.png) [@nicola](https://www.debian-fr.org/u/nicola)\
**Post date:** [Décembre 29, 2023, 5:00 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/5 "2023-12-29T17:00:50Z")

</div>

Je pense plutôt un petit script en Python mais je ne doute pas qu’un pro d’awk qui passe par là pondra une solution imbitable en une ligne.

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Décembre 29, 2023, 5:06 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/6 "2023-12-29T17:06:23Z")

</div>

> [@nicola](#):
>
> un petit script en Python

Un canon pour tuer une mouche 😉

Une boucle de type

```auto
for $f in <recupération de la liste des fichiers>
do
 $fnew=<determination du nouveau nom)
 rename $f $fnew
done

```

c’est suffisant. Sachant que cela peut impliquer d’utiliser awk et/ou sed 🙂

---

<div class="post-metadata">

**Author:** ![RG88](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/c5a1d2/32.png) [@RG88](https://www.debian-fr.org/u/RG88)\
**Post date:** [Décembre 29, 2023, 8:37 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/7 "2023-12-29T20:37:11Z")

</div>

disons que j’ai 3 fichiers :  
Bruno[az18sdh].mp4  
Franck[juri99].mp4  
Serge[8juin].mp4  
J’aimerais qu’en quelques lignes de commandes, je change les noms de fichiers en :  
Bruno.mp4  
Franck.mp4  
Serge.mp4  
Voila!

---

<div class="post-metadata">

**Author:** ![Verner](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@Verner](https://www.debian-fr.org/u/Verner)\
**Post date:** [Décembre 29, 2023, 8:55 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/8 "2023-12-29T20:55:21Z")

</div>

Pour test:

```nohighlight
$ mkdir /tmp/test ; cd /tmp/test
$ touch Bruno[az18sdh].mp4 Franck[juri99].mp4 Serge[8juin].mp4

$ for x in *.mp4 ; do mv "$x" "$(sed 's/\[.*\]//' <<< "$x")" ; done

$ ls
  Bruno.mp4 Franck.mp4 Serge.mp4

```

---

<div class="post-metadata">

**Author:** ![RG88](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/c5a1d2/32.png) [@RG88](https://www.debian-fr.org/u/RG88)\
**Post date:** [Décembre 30, 2023, 6:13 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/9 "2023-12-30T06:13:41Z")

</div>

OK merci, ca marche comme je le souhaitais !  
super

---

<div class="post-metadata">

**Author:** ![Verner](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@Verner](https://www.debian-fr.org/u/Verner)\
**Post date:** [Décembre 30, 2023, 2:57 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/10 "2023-12-30T14:57:27Z")

</div>

C’est toujours plus simple avec des exemples concrets pour tester.

Sinon si ‹&nbsp;sed&nbsp;› parait trop intriguant, avec bash, il y a en fait plus simple avec directement:

```auto
for x in *.mp4 ; do mv "$x" "${x/\[*\]/}" ; done

```

ou mieux si tu as un mélange non homogène, autre que des `xyz[abcd].mp4`

```auto
for x in *.mp4 ; do y="${x/\[*\]/}"; [-f "$y"] || mv "$x" "$y" ; done

```

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Décembre 30, 2023, 3:29 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/11 "2023-12-30T15:29:18Z")

</div>

> [@Verner](#):
>
> `for x in *.mp4 ; do mv "$x" "${x/\[*\]/}" ; done`

étonnant  
Tu as quelques part une doc détaillée?

---

<div class="post-metadata">

**Author:** ![MPython\_Alaplancha](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mpython_alaplancha/32/14038_2.png) [@MPython\_Alaplancha](https://www.debian-fr.org/u/MPython_Alaplancha)\
**Post date:** [Décembre 31, 2023, 6:33 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/12 "2023-12-31T06:33:18Z")

</div>

Bonjour,  
Avec rename. (à installer si nécessaire)  
`rename -n 's/\[.*?\]//' *mp4`  
à exécuter depuis le répertoire concerné . Cette commande est une simulation, pour qu’elle renome réellement les fichiers enlève l’option -n

---

<div class="post-metadata">

**Author:** ![Verner](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/34f0e0/32.png) [@Verner](https://www.debian-fr.org/u/Verner)\
**Post date:** [Décembre 31, 2023, 10:13 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/13 "2023-12-31T10:13:36Z")

</div>

> [@dindoun](#):
>
> Tu as quelques part une doc détaillée?

Tout est détaillé à la rubrique ‹&nbsp; **Parameter Expansion** &nbsp;› du man bash.

> [@MPython\_Alaplancha](#):
>
> Avec rename. (à installer si nécessaire)

La difficulté quand on se disperse dans les micro-commandes supplémentaires est que ce qui simplifie le traitement de cas simples, peut le compliquer pour des cas plus complexes.  
‹&nbsp;rename&nbsp;› non seulement est un paquet supplémentaire, mais dépend aussi du paquet **Perl** , et n’évacue pas la nécessité de savoir quelle expression regex produira l’effet désiré ( **le plus dur est en fait là** …).  
On peut vite se noyer dans les différents types de regex ou de globbing, selon les options de configuration de Bash, par défaut, ou pas. Vite un casse-tête.

sed → Basic ( **BRE** ) regular expression par défaut → [sed / BRE](https://www.gnu.org/software/sed/manual/sed.html#BRE-vs-ERE)  
`sed 's/\[.*\]//' <<< "$x"`

bash → **globbing**  
`"${x/\[*\]/}"`

rename → regex **PERL**  
`'s/\[.*\]//'` (le ‹&nbsp;?&nbsp;› n’était pas nécessaire)

Mais rename est sympa pour les cas simples, évitant une boucle for/done.

---

<div class="post-metadata">

**Author:** ![MPython\_Alaplancha](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mpython_alaplancha/32/14038_2.png) [@MPython\_Alaplancha](https://www.debian-fr.org/u/MPython_Alaplancha)\
**Post date:** [Décembre 31, 2023, 3:50 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/14 "2023-12-31T15:50:57Z")

</div>

Pour ma part, comme les fois où je me suis confronté aux regex j’eus utilisé essentiellement le module Re de python, rename me convient et a jusqu’à présent toujours satisfait à mes demandes.

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Décembre 31, 2023, 6:15 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/15 "2023-12-31T18:15:01Z")

</div>

@Zargos , il n’est pas utile de faire appel à awk et/ou sed si l’on passe par Python. Le module de base Python re pour les expressions régulières fera très bien l’affaire.

Quand à utiliser Python au lieu d’un script bash s’appuyant sur awk/sed pour faire juste ceci, c’est vrai que c’est un peu d’hommage car ce qui est Linuxien n’est pas forcément Pythonien, ou inversement.

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Décembre 31, 2023, 6:44 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/16 "2023-12-31T18:44:04Z")

</div>

> Pour ma part, comme les fois où je me suis confronté aux regex j’eus utilisé essentiellement le module Re de python,

Les expressions régulières se retrouvent aussi bien dans l’outil sed que le langage awk ou le module de base Python re. Il s’agit de rédiger l’expression régulière appropriée: au regard de la simplicité du problème, les différences éventuelles entre sed, awk, et Python, seront minimes ou inexistantes.  
Une fois l’expression régulière trouvée, il devient aisé de changer la chaîne de caractères concernée, en l’occurrence le nom du fichier, avec l’outil ou le langage de son choix. Au niveau clarté ou lisibilité du code, dans le cas présent j’ai une préférence pour Python. Si l’opération entre plus dans le cadre de l’administration d’un système Unix/Linux que le réel développement d’une application, alors ma préférence va à sed au sein d’un script bash. En dernier lieu, j’utiliserai awk et sa commande sub si le script devient trop lourd en bash avec sed ou si je veux aller plus rapidement à l’essentiel: awk est en mesure de traiter automatiquement une liste de noms de fichiers placés dans un fichier sans avoir à écrire la moindre boucle; chaque ligne d’un script awk étant appliqué à toutes les lignes du fichier donné en dernier argument.

---

<div class="post-metadata">

**Author:** ![nicola](https://www.debian-fr.org/user_avatar/www.debian-fr.org/nicola/32/8969_2.png) [@nicola](https://www.debian-fr.org/u/nicola)\
**Post date:** [Janvier 1, 2024, 9:02 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/17 "2024-01-01T09:02:16Z")

</div>

> [@vbreton](#):
>
> ce qui est Linuxien n’est pas forcément Pythonien, ou inversement.

Python est très largement installé dans Linux. Dans Windows, en revanche…

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Janvier 1, 2024, 11:17 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/18 "2024-01-01T11:17:54Z")

</div>

Personnellement j’utilise souvent perl pour les expression régulière, celui-ci étant devenu un standard de fait ( et qui a permis de créer PCRE).  
Python est plus limité car je crois qu’il se cantonne au POSIX avec quelques différences ponctuelles.

---

<div class="post-metadata">

**Author:** ![nicola](https://www.debian-fr.org/user_avatar/www.debian-fr.org/nicola/32/8969_2.png) [@nicola](https://www.debian-fr.org/u/nicola)\
**Post date:** [Janvier 1, 2024, 11:46 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/19 "2024-01-01T11:46:23Z")

</div>

À propos :

```
> file /bin/rename
/bin/rename: symbolic link to /etc/alternatives/rename
> file /etc/alternatives/rename
/etc/alternatives/rename: symbolic link to /usr/bin/file-rename
> file /usr/bin/file-rename 
/usr/bin/file-rename: Perl script text executable
```

---

<div class="post-metadata">

**Author:** ![MPython\_Alaplancha](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mpython_alaplancha/32/14038_2.png) [@MPython\_Alaplancha](https://www.debian-fr.org/u/MPython_Alaplancha)\
**Post date:** [Janvier 1, 2024, 12:30 UTC](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370/20 "2024-01-01T12:30:54Z")

</div>

> [@Zargos](#):
>
> Python est plus limité car je crois qu’il se cantonne au POSIX avec quelques différences ponctuelles

Le module Re (gérant les expressions régulières) est aussi basé sur le standard perl

[Page suivante](https://www.debian-fr.org/t/renommer-des-fichiers-contenant-dans-le-nom/89370.md?page=2)
