[bash] renommer des repertoires en recursif

renommer des repertoires en recursif [bash] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 27-10-2004 à 17:09:49    

Bonjour,
 
mon projet a changé de nom.
je cherche donc a renommer les fichiers de ce projet, et donc a supprimer toute trace de l'ancien nom
 
j'ai des repertoires et des sous-repertoires qui contiennent "toto" dans leur nom.
 
je voudrais remplacer toutes les occurences de "toto" par "titi" ( le nouveau nom du projet )
 
( ex : toto.config => titi.config, totorep => titirep )
 
lorsque je suis dans un repertoire, c'est bon je fait comme ceci :

Code :
  1. rename 's/Toto/Titi/' *
  2. rename 's/toto/titi/' *


 
mais lorsqu il s'agit de renommer des repertoires c'est la paguaille ( il essaie toujours de parcourir le repertoire qu'il vient de renommer )
 
une idee ?


Message édité par bemixam le 27-10-2004 à 19:29:34
Reply

Marsh Posté le 27-10-2004 à 17:09:49   

Reply

Marsh Posté le 27-10-2004 à 17:14:01    

voila mon script du moment
 

Code :
  1. function replace_toto()
  2. {
  3. echo $1
  4. sed -e '
  5. N
  6. s/Toto/Titi/g
  7. N
  8. s/toto/titi/g
  9. P
  10. D ' $1 > $1.tititmp
  11. rm $1
  12. rename 's/\.tititmp$//' *.tititmp
  13. rename 's/Toto/Titi/' $1
  14. rename 's/toto/titi/' $1
  15. return 0
  16. }
  17. for i in `ls`;
  18. do
  19.   if [ -f $i ]
  20.   then
  21.    echo "1 fichier : "$i
  22.    replace_toto $i
  23.   else
  24.     echo "1 dossier : "$i
  25.     cd $i
  26.     for j in `ls`;
  27.      do
  28.       if [ -f $j ]
  29.       then
  30.        echo "2 fichier : "$j
  31.        replace_toto $j
  32.       else
  33.        echo "2 dossier : "$j
  34.       cd $j
  35.       for k in `ls`;
  36.        do
  37.         if [ -f $k ]
  38.         then
  39.          echo "3 fichier : "$k
  40.          replace_toto $k
  41.         else
  42.          echo "3 dossier : "$k
  43.       cd $k
  44.       for l in `ls`;
  45.        do
  46.         if [ -f $l ]
  47.         then
  48.          echo "4 fichier : "$l
  49.          replace_toto $l
  50.         else
  51.          echo "4 dossier : "$l
  52.         fi
  53.        done
  54.       cd ..
  55.         fi
  56.        done
  57.       cd ..
  58.       fi
  59.      done
  60.     cd ..
  61.    fi
  62. done


 
c'est tres tres tres gruik :-/
 
ps : je cherche aussi a remplacer toutes les variables qui contiennent toto ( et ca fonctionne bien )
 
reps : je peux toujours relancer le script X fois au point ou j'en suis.
mais bon ...


Message édité par bemixam le 27-10-2004 à 17:47:44
Reply

Marsh Posté le 27-10-2004 à 21:58:19    

bon j ai trouve plus simple :D
 

Code :
  1. find . * -type d -name "*Toto*" | xargs rename 's/Toto/Titi/'
  2. find . * -type f -name "*Toto*" | xargs rename 's/Toto/Titi/'


Message édité par bemixam le 27-10-2004 à 22:06:53
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed