#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
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_*
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 !
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
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
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é
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 !!!)
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
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