Shell renommer dossier

Résolu
remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'aimerai renommer un dossier dans un script shell.
Mon dossier se nomme toto.toto.toto et j'aimerai qu'il devienne toto_toto_toto.
Je ne peux pas utiliser la commande mv étant donné que le nom de dossier est récupéré et non créé à la main.
J'ai essayé rename 's/./_/g' toto.toto.toto mais cela n'a pas fonctionné.

Par avance merci

6 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    pourtant avec rename ...
    $ ls
    tata.tata.tata	toto.toto.toto
    $ rename 's/\./_/g' *
    $ ls
    tata_tata_tata	toto_toto_toto
    $ 
    $ 
    
    1
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Salut,

      Quelle version de "rename" ?

      $ ls
      tata.tata.tata/  toto.toto.toto/
      
      $ rename 's/\./_/g' *
      
      $ ls
      tata.tata.tata/  toto.toto.toto/
      
      $ rename -V
      rename (util-linux-ng 2.17.1)
      
      $ 

      ;-((
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      mystère ...sur 10.04/Lucid
      $ rename -V
      Unknown option: V
      Usage: rename [-v] [-n] [-f] perlexpr [filenames]
      $ 
      $ rename -v
      Usage: rename [-v] [-n] [-f] perlexpr [filenames]
      $ rename --version
      Unknown option: version
      Usage: rename [-v] [-n] [-f] perlexpr [filenames]
      $ 
      $ 
      
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Bizarrement j'ai la page de man de rename.pl mais pas d'exécutable ;-(

      $ lsb_release -a
      LSB Version:	lsb-4.0-amd64:lsb-4.0-noarch:core-3.0-amd64:core-3.0-noarch:core-3.2-amd64:core-3.2-noarch:core-4.0-amd64:core-4.0-noarch
      Distributor ID:	MandrivaLinux
      Description:	Mandriva Linux 2010.2
      Release:	2010.2
      Codename:	Henry_Farman
      0
  2. sybsy Messages postés 109 Date d'inscription   Statut Membre Dernière intervention   122
     
    Bonjour,
    et la commande rename ?

    > rename toto.toto.toto toto_toto_toto
    0
  3. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    Non la commande rename ne fait rien du tout et je ne peux pas rentrer en dur le nom du dossier.
    En fait il faut que je remplace les "." en "_" sur mon nom de dossier que je ne connais pas à l'avance.
    0
  4. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    dossierO = $(ls *.*.*/)
    dossierD = $(echo $dossierO | tr "." "_" );
    mv dossierO dossierD
    
    le principe est de mettre le nom de dossier (en supposant qu'in n'y en a qu'un, sinon, on peut adapter) dans une variable, puis de passer cette variable à "tr" pour remplacer tout les points par des soulignés, sauver le résultat dans une variable.
    Et enfin renommer le tout.
    Note que je n'ai pas testé.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Comment récupères-tu le nom de ton dossier ?
    0
  7. remousse Messages postés 299 Date d'inscription   Statut Membre Dernière intervention   6
     
    J'ai relu mon script justement pour retrouver le moment où je récupère le nom du dossier.
    Je le récupère comme ceci: id=$(echo $file | cut -b-17)
    Donc le mieux serait de pouvoir modifier la variable directement au lieu de passer par un dossier "tampon" mais pareil la modification de variable peut-elle se faire avec sed ou autre ?
    0
    1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      Pour modifier une variable par sed ou autre, fait comme je t'ai dit :
      echo $variable|sed
      en plaçant cette commande entre $( et ) tu peux modifier variable.
      Remplace le "*" de dubeck par une commande alors.
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Donc le nom de ton dossier se trouve dans "id" ?

      A adapter à ton cas :

      $ VAR="toto.toto.toto"
      
      $ echo ${VAR//\./_}
      toto_toto_toto
      
      $ ls
      tata.tata.tata/  toto.toto.toto/
      
      $ for i in *;do echo ${i//\./_};done
      tata_tata_tata
      toto_toto_toto
      
      $ for i in *;do mv -v "${i}"  "${i//\./_}";done
      « tata.tata.tata » -> « tata_tata_tata »
      « toto.toto.toto » -> « toto_toto_toto »
      
      $ ls
      tata_tata_tata/  toto_toto_toto/
      
      $
      0