Re: Renaommage en masse

Page principale

Répondre à ce message
Auteur: Olivier Allard-Jacquin
Date:  
À: guilde
Sujet: Re: Renaommage en masse
    Re,

Le 08/12/2012 15:52, Frédéric a écrit :
> On samedi 08 décembre 2012, Olivier Allard-Jacquin wrote:
>
>>         Bizarre, chez moi cela marche :
>> $ touch "tt/04-titre (2)"
>> $ find tt/ -type f|sort|sed -e 's|\(.*\)/\([0-9]\+\)-\([^/]*\)$|mv
>> "\1/\2-\3" "\1/\2. \3"|g'
>> mv "tt/01-titre1" "tt/01. titre1"
>> mv "tt/02-titre1" "tt/02. titre1"
>> mv "tt/03-titre 1" "tt/03. titre 1"
>> mv "tt/04-titre (2)" "tt/04. titre (2)"
>> $ mv "tt/04-titre (2)" "tt/04. titre (2)"
>> $ find tt/
>> tt/
>> tt/04. titre (2)         <<<<<<<<<<
>> tt/03-titre 1
>> tt/02-titre1
>> tt/01-titre1

>>
>>         Tu utilises quoi comme shell ? Ici, c'est du bash.

>
> bash aussi. Mais en fait, j'ai dit une bétise, c'est sur les ' (apostrophes) qu'il coince.


    Tu es sur d'avoir copier-coller mon code, et de ne pas avoir remplacer
les ' dans le  "sed -e" ? Car chez moi ca marche:


$ touch "tt/05-titre's bar"
$ find tt/ -type f|sort|sed -e 's|\(.*\)/\([0-9]\+\)-\([^/]*\)$|mv
"\1/\2-\3" "\1/\2. \3"|g'
mv "tt/01-titre1" "tt/01. titre1"
mv "tt/02-titre1" "tt/02. titre1"
mv "tt/03-titre 1" "tt/03. titre 1"
mv "tt/04-titre (2)" "tt/04. titre (2)"
tt/04. titre (2)
mv "tt/05-titre's bar" "tt/05. titre's bar"
$ mv "tt/05-titre's bar" "tt/05. titre's bar"
$

    Envoies-moi un exemple de nom de fichier qui ne passe pas. C'est
peut-être un problème d'UTF-8, de caractère accentué, ou d'autre truc du
genre.


> Autre truc : lorsqu'il ne trouve pas le pattern, il sort quand même le nom du fichier ; c'est
> possible de ne pas le sortir ?


    Mauvaise définition du cahier des charges, il n'était pas question de
fichiers qui ne correspondaient pas au modèle ! :)


    Oui, c'est facile, il suffit de commencer par mettre un filtre sur le
modèle du fichier :


$ find tt/ -type f|sort|sed -e '/\/\([0-9]\+\)-\([^\/]*\)$/!d' -e
's|\(.*\)/\([0-9]\+\)-\([^/]*\)$|mv "\1/\2-\3" "\1/\2. \3"|g'
mv "tt/06-titre 6" "tt/06. titre 6"

Ici, les autres fichiers du répertoire "tt/", qui ont été précédemment
renommées, n'apparaissent plus, car il ne correspondent plus au modèle.

Note que entre les deux expressions de sed :
      -e '/\/\([0-9]\+\)-\([^\/]*\)$/!d'
-e 's|\(.*\)/\([0-9]\+\)-\([^/]*\)$|mv "\1/\2-\3" "\1/\2. \3"|g'


j'ai dû backslasher les '/' dans la 1ère ligne.
En effet l'astuce du '|' dans la ligne de remplacement 's|toto|titi|g'
n'est pas réutilisable dans celle du -e '/grep_emulation/!d'

    Cordialement,


                        Olivier
-- 
~~~~~~~  _____/\_____  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Phoenix /   _ \/ _   \    Olivier Allard-Jacquin
       /   / \  / \   \   Web:  http://olivieraj.free.fr/
      /___/  /  \  \___\  Mail: olivieraj@???
~~~~ /////  ///\\\  \\\\\ ~~~~~~~~~~~~~~~~~~~~~~~ Linux Powered !!