Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/03/2012, à 14:46

krislec

[Résolu] Script renommage multiple dossiers + modif table mysql

Bonjour à tous,

Etant une grosse bille en script shell, j'en appelle à vous pour m'aider un monter un script qui renomme plusieurs dossiers (de nom numérique) d'un coup, de 128 à 156 par exemple:

ce que je voudrais:
128 => 150
129 => 151
130 => 152
(Il est important de préserver cet ordre car les dosssiers son remplis et demande à être renommer à partir de 150... (dossier en correspondance avec un id d'une base mysql ...)

le peu de script que j'ai écrit... ben, je le met pas tellement je suis ridicule  !!!

Merci de votre aide.

Dernière modification par krislec (Le 16/03/2012, à 01:26)


PC bureau Quad Core 2.4Ghz ....Natty 11.10, mais UBUNTU classique !!!

Hors ligne

#2 Le 15/03/2012, à 14:48

sputnick

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

En bash

for d in {128..156}; do echo mv "$d" "$((d+22))"; done
mv 128 150
mv 129 151
mv 130 152
mv 131 153
mv 132 154
mv 133 155
mv 134 156
mv 135 157
mv 136 158
mv 137 159
mv 138 160
mv 139 161
mv 140 162
mv 141 163
mv 142 164
mv 143 165
mv 144 166
mv 145 167
mv 146 168
mv 147 169
mv 148 170
mv 149 171
mv 150 172
mv 151 173
mv 152 174
mv 153 175
mv 154 176
mv 155 177
mv 156 178

Ya juste a retirer le echo

Dernière modification par sputnick (Le 15/03/2012, à 14:50)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 15/03/2012, à 15:11

krislec

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

Super !!!!
Au poils !

Un grand Merci !

Je voyais pas ça aussi facilement !!!


PC bureau Quad Core 2.4Ghz ....Natty 11.10, mais UBUNTU classique !!!

Hors ligne

#4 Le 15/03/2012, à 15:22

sputnick

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

De rien, pour certains c'est le sudoku ou les mots croisés, moi c'est le shell wink


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#5 Le 15/03/2012, à 15:39

Totor

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

sauf que c'est pas bon ...

tel que c'est fait, si les dossiers 150 et plus existent, alors les dossiers dont le nom+22 correspondant seront simplement déplacés et non pas renommés.

il faut vérifier l'existance avant  ...

Dernière modification par Totor (Le 15/03/2012, à 15:44)


-- Lucid Lynx --

Hors ligne

#6 Le 15/03/2012, à 15:58

pingouinux

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

Il faut commencer par le haut :

for d in {156..128}; do echo mv "$d" "$((d+22))"; done

Hors ligne

#7 Le 15/03/2012, à 16:05

sputnick

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

Bien vu les gars, je n'ai fais que répondre à la demande, vous êtes allés plus loin.


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#8 Le 15/03/2012, à 18:45

krislec

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

Je ne peux pas commencer par le haut !!!
En fait je vous donne plus précisément des détails:
J'ai une table mysql "users" dont l'id a fait un bon de 4450 à 44850 (par erreur de manip !!!!:( ) Je voudrais tenter de renommer tous ces id de la table en repartant de 4450, 4451, 4452 etc en faisant correspondre les id avec le nom correspondant des dossiers "users"

donc:

id dossier:               |             id table mysql:
44850 => 4450                         44850 => 4450
44851 => 4451                         44851 => 4451
44852 => 4452                         44852 => 4452
....                                             ......

Périlleux n'est-ce pas ?


PC bureau Quad Core 2.4Ghz ....Natty 11.10, mais UBUNTU classique !!!

Hors ligne

#9 Le 15/03/2012, à 20:41

Levi59

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

Si tu n'as que des nombres à 5 chiffres :

~$ OldId=44850
~$ NewId=${OldId:0:2}${OldId: -2:2}
~$ echo $NewId
4450

Hors ligne

#10 Le 15/03/2012, à 22:15

krislec

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

En fait, j'ai pris c'est chiffre comme exemple mais en réalité c'est plutôt:
44801 ->  4560
....       ->   ....
44931 ->  4690,
mais ma table continue à grandir !!! D'où le côté Urgent de la chose !


PC bureau Quad Core 2.4Ghz ....Natty 11.10, mais UBUNTU classique !!!

Hors ligne

#11 Le 15/03/2012, à 22:42

sputnick

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

C'est quoi ce binz entre la table et des mv sur le filesystem ???

Tu attaque quand même pas /var/lib/mysql !!!???

Changer des ID c'est possible assez facilement en arrêtant la base qq minutes, le temps de bloquer de nouveaux INSERTs et de faire un dump dans un fichier puis de l'éditer avec vim ou sed.


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#12 Le 15/03/2012, à 23:29

krislec

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

Non,non...

J'ai sur mon site ("intranet") un dossier /site/users qui contient tous les dossiers des utilisateurs:

/site/users/1/
/site/users/2/
....

l'utilisateur dont l'id (id de mes tables en auto incrémentation) est "13" se voit (lors de la création) attribué un dossier dans l'arborescence du site un dossier du nom de son id soit : 13.

/site/users/13

D'où l'importance de faire correspondre les nouveaux id (44081 =>4560....etc).

Il est évident que je pourrai laissé la base de données gérées les users avec ce bond en avant de 4559 à 44081, mais cela me gène car les identifiant sont affichés à l'écran, cela me "perturbe" de voir 44081 alors qu'il n'y a en réalité environ 4690 users....

Le renomage auto des dossiers me semblant faisable, je cherche à faire un update de toutes mes tables qui contiennent l'identidiant "iduser" qui est redondant sur plusieurs de mes tables mysql...

Dernière modification par krislec (Le 15/03/2012, à 23:30)


PC bureau Quad Core 2.4Ghz ....Natty 11.10, mais UBUNTU classique !!!

Hors ligne

#13 Le 15/03/2012, à 23:33

Postmortem

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

Salut,

rep=44801
nouveau_rep=4560
while [[ -d $rep ]]
do
echo mv "$((rep++))" "$((nouveau_rep++))"
done

J'ai pas testé, du coup tente avec le echo devant mv.
Tu pourras le retirer si c'est ok

Dernière modification par Postmortem (Le 15/03/2012, à 23:34)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#14 Le 15/03/2012, à 23:43

krislec

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

Execellent, merci Postmortem !
Je recherche maintenant à modifier mes tables, avant de passer au renommage des dossiers...


PC bureau Quad Core 2.4Ghz ....Natty 11.10, mais UBUNTU classique !!!

Hors ligne

#15 Le 15/03/2012, à 23:53

sputnick

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

Wé, bonne idée Postmortem, et après c'est facile à renommer :

for d in {128..156}; do echo mv "$d" "placeholder_$((d+22))"; done
prename 's:placeholder::' placeholder_*
krislec a écrit :

Je recherche maintenant à modifier mes tables, avant de passer au renommage des dossiers...

C'est pour ca que je te dit que ça sera plus facile dans un dump avec vim ou sed

Dernière modification par sputnick (Le 16/03/2012, à 00:12)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#16 Le 15/03/2012, à 23:59

krislec

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

@Sputnick : Ouahhhh, là j'ai du mal à suivre....

Sans vouloir te vexer, je préfère l'écriture de Postmortem car je la comprends mieux...(je fais plus souvent du php, d'habitude !!!!). Néanmoins merci de ton aide.


PC bureau Quad Core 2.4Ghz ....Natty 11.10, mais UBUNTU classique !!!

Hors ligne

#17 Le 16/03/2012, à 00:06

krislec

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

A oui....Tu fais un dump de la base en entier, tu ouvres le fichier et tu modifie tous les id....
Le problème, c'est qu'il risque d'enlever les valeurs de '44801' qui ne conernent pas les idusers !!!

J'avoue ne pas avoir pensé à cette technique !

Mais je dois le faire via mysql pour tester que le id à modifier est bien iduser.....

Mais j'y pense.... cela reste possible aussi !!! non ?


PC bureau Quad Core 2.4Ghz ....Natty 11.10, mais UBUNTU classique !!!

Hors ligne

#18 Le 16/03/2012, à 00:07

krislec

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

Prename ? Kezako => man ! wink

Ah oui... mais si je fais "mv" c'est suffisament cela renomme le dossier... Je comprends pas très l'utilité de cette fonction prename...

Dernière modification par krislec (Le 16/03/2012, à 00:08)


PC bureau Quad Core 2.4Ghz ....Natty 11.10, mais UBUNTU classique !!!

Hors ligne

#19 Le 16/03/2012, à 00:09

sputnick

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

sputnick a écrit :
krislec a écrit :

@Sputnick : Ouahhhh, là j'ai du mal à suivre....

Sans vouloir te vexer, je préfère l'écriture de Postmortem car je la comprends mieux...(je fais plus souvent du php, d'habitude !!!!). Néanmoins merci de ton aide.

No soucy, t'a que la profusion des choix.

Par contre, tu aura besoin de "ma" commande prename wink

krislec a écrit :

A oui....Tu fais un dump de la base en entier, tu ouvres le fichier et tu modifie tous les id....
Le problème, c'est qu'il risque d'enlever les valeurs de '44801' qui ne conernent pas les idusers !!!

J'avoue ne pas avoir pensé à cette technique !

Mais je dois le faire via mysql pour tester que le id à modifier est bien iduser.....

Mais j'y pense.... cela reste possible aussi !!! non ?

Je suppose que idusers ca doit etre une table user ? C'est juste cette table qu'il faut dumper !

mysqldump ***OPTIONS***  nom_de_base nom_de_table

Pour prename, c'est une erreur, un détail m'avait échappé wink

Dernière modification par sputnick (Le 16/03/2012, à 00:11)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#20 Le 16/03/2012, à 00:19

krislec

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

Ok.

En fait, j'ai une table users:
iduser ... int (autoincrémentation)
nom ....varchar......etc

et 11 autres tables qui contiennent
id: int (autoincrémentation)
iduser .....int
commentaires .....text....etc

je dois donc faire 11 dump....

(Ps: je tente de faire une fonction php pour automatiser tout ca en le faisant sur un lien (provisoire) du site.
(Le site est un site intranet qui me sert dans mon travail (on est que 2 a y avoir accès, en plus des éventuels hackers masqués, dans l'ombre big_smiletonguelol !!!)


PC bureau Quad Core 2.4Ghz ....Natty 11.10, mais UBUNTU classique !!!

Hors ligne

#21 Le 16/03/2012, à 00:38

sputnick

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

Tu n'a pas de clause

ON UPDATE

pour répercuter les changement de la table users ?

STP met ton code dans les balises du meme nom dans tes posts : selectionne et clique sur le bouton bleu <> et corrige ton titre.

Dernière modification par sputnick (Le 16/03/2012, à 00:39)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#22 Le 16/03/2012, à 00:48

krislec

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

Ok. Désolé mais comme c'est plus des explications que du "vrai code" j'utilise pas les balises "code", mais promis je vais m'appliquer...

Si non j'ai malheureusement pas :

ON UPDATE CASCADE

car ma base est en

MylSAM

et non en

InnoDB

! J'ai fait des tests mais j'ai eu des messages d'erreur. Il est vrai que je devrais renforcer mon attention sur cette méthode car cela permetrait déviter que cela se reproduise...
Je ne sais pas très bien si c'est la table "users et/ou mes 11 autres tables qu'il faut que je modifie en

innoBD

PC bureau Quad Core 2.4Ghz ....Natty 11.10, mais UBUNTU classique !!!

Hors ligne

#23 Le 16/03/2012, à 01:24

krislec

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

Mission réussie !!!

Je fini par réussir en modifiant les tables via le site lui-même (avec le framwork Codeigniter, via un controleur provisoire ) ...

    public function index()
    {
      $i = 44801;     // fin = 44931;
      $j = 4560;
      $table = array('users', 'tbl1', 'tbl2', 'tbl3', 'tbl4', 'tbl5', 'tbl6', 'tbl7', 'tbl8', 'tbl9', 'tbl10', 'tbl11');
      
      for ($i= 44801; $i <= 44931; $i++)
      {
        foreach($table as $k=>$v)
        {    
          $data = array('idpat'=>$j);
          $this->db->where('idpat', $i);
          $this->db->update($v, $data);
        }
        $j++;
      }
    }

= bricolage efficace.

puis renommer les dossiers :

rep=44801
nouveau_rep=4560
while [[ -d $rep ]]
do
echo mv "$((rep++))" "$((nouveau_rep++))"
done

Ps: J'aurais pu aussi très bien renommer les dossiers directement via le site aussi....

Un suppppper grand Merci à TOUS !

Dernière modification par krislec (Le 16/03/2012, à 01:24)


PC bureau Quad Core 2.4Ghz ....Natty 11.10, mais UBUNTU classique !!!

Hors ligne

#24 Le 16/03/2012, à 01:39

sputnick

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

cool wink


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#25 Le 16/03/2012, à 14:18

Totor

Re : [Résolu] Script renommage multiple dossiers + modif table mysql

juste pour info : si tu avais modifié le nom de tes dossiers, cela n'aurait pas suffit... il aurait également fallu que tu modifies le fichier /etc/passwd ...


-- Lucid Lynx --

Hors ligne