[scripte] Executer une commande pour chaque element d'un fichier...

Executer une commande pour chaque element d'un fichier... [scripte] - Linux et OS Alternatifs

Marsh Posté le 11-03-2002 à 09:32:04    

Voila mon probleme:
 
J'ai des serveurs dont j'aimerai bien faire un backup periodique de plusieurs fichier (variable selon le serveur). Cette liste sera dans un fichier texte.
La, j'aurai un scripte qui lancera une commande (comme un cp ou un scp) pour chacun de ces fichier.
 
Je sais que c'est possible avec awk, mais la franchement j'ai pas trouve  :/
 
Quelqu'un saurais comment faire?
 
Merci.


---------------
Grrrrr...
Reply

Marsh Posté le 11-03-2002 à 09:32:04   

Reply

Marsh Posté le 12-03-2002 à 05:53:19    

:heink:  :bounce:


---------------
Grrrrr...
Reply

Marsh Posté le 12-03-2002 à 07:52:50    

tu peux faire ca simplement en perl avec un split  
tu trouves un delimiteur entre tes nom dans ton fichier et apres tu oiuvres le fichier tu fais un split sur ce delimiteur ,
 
puis tu execute ta commande sur chaque elem de ton tab .


---------------
Mes News
Reply

Marsh Posté le 12-03-2002 à 07:55:40    

R@NNIS a écrit a écrit :

tu peux faire ca simplement en perl avec un split  
tu trouves un delimiteur entre tes nom dans ton fichier et apres tu oiuvres le fichier tu fais un split sur ce delimiteur ,
 
puis tu execute ta commande sur chaque elem de ton tab .  




 
Euhhhh, en perl je connais que dalle et en scripting sh/bash/csh la je peux me debrouiller, mais pas en perl/python  :/


---------------
Grrrrr...
Reply

Marsh Posté le 12-03-2002 à 08:06:33    

ben c est pas sorcier ;)
 
je t ai jamais dis d utiliser python ;)  
perl suffit amplement pour ce ke tu veux faire ;)
 
sinon en script shell je suis certains ke d autres vont repondre bientot.


---------------
Mes News
Reply

Marsh Posté le 12-03-2002 à 08:12:33    

R@NNIS a écrit a écrit :

ben c est pas sorcier ;)
 
je t ai jamais dis d utiliser python ;)  
perl suffit amplement pour ce ke tu veux faire ;)
 
sinon en script shell je suis certains ke d autres vont repondre bientot.  




 
Oui, j'etais persuade que perl sais faire le boulot, mais j'y ai jamais touche alors c'est impossible pour moi d'en faire un   :wahoo:  
 
Vais voir si qq a deja eu le cas en shell script.
 
Merci qd meme  [:thektulu]


---------------
Grrrrr...
Reply

Marsh Posté le 12-03-2002 à 08:45:17    

heu...
 
cp `cat fichier` rep/
 
 
:??: c ça que tu veux faire ?


---------------
TRM (c) ??? PAWAAAAA !
Reply

Marsh Posté le 12-03-2002 à 08:49:46    

THE REAL MANU a écrit a écrit :

heu...
 
cp `cat fichier` rep/
 
 
:??: c ça que tu veux faire ?  




 
 [:tdk04]  Comme quoi c'est si simple des fois, merci  :jap:


---------------
Grrrrr...
Reply

Marsh Posté le 12-03-2002 à 08:50:20    

lol ouaip c est simple ca :D
 
en gros en version perl pas top propre tu pourrais faire un truc du genre .
--------------------------
#!/usr/bin/perl  
 
main();
 
 
sub main
{
    $file = "/var/toto";
 
    open(FILE , $file);
    $i = 1;
 
    while (<FILE> )
    {
 chop;
 $tab[$i++]= $_;
    }
    $i--;
    while ($i)
    {
 printf("Saving file [%s] \n" , $tab[$i--]);
 system("echo ".$tab[$i]." "."Saved Succesfully." );
    }
    close (FILE);
 
}
---------------------
 
avec bien sur a la place du system ta commande sur chaque elem de ton fichier.
 
notre k il faut ke ton fichier source sois de cette tete la
 
----------
file1
file2
file3
----------
 
voila ;)
 
pas sorcier non plus la methode de manu

 

[jfdsdjhfuetppo]--Message édité par R@NNIS--[/jfdsdjhfuetppo]


---------------
Mes News
Reply

Marsh Posté le 12-03-2002 à 08:51:34    

Je prefere la single line de Manu sois dit en passant  [:thektulu]


---------------
Grrrrr...
Reply

Marsh Posté le 12-03-2002 à 08:51:34   

Reply

Marsh Posté le 12-03-2002 à 08:52:02    

vi bien plus simple ;)
 
je croyais ke tu voulais faire un truc plus pointu ;)


---------------
Mes News
Reply

Marsh Posté le 12-03-2002 à 08:54:37    

R@NNIS a écrit a écrit :

vi bien plus simple ;)
 
je croyais ke tu voulais faire un truc plus pointu ;)  




 
 :non:  Bete truc.
 
En fait je veux que le soir, il y ait un script qui se lance (cron) et qui fasse le backup de la config de mes serveurs (le fichier avec la liste des fichier [clair ca  :lol: ]) Comme ca, si y'a un pepin, j'ai tous mes fichiers conf sous la main, reinstallation rapide su un crash disk arrive.  [:thektulu]


---------------
Grrrrr...
Reply

Marsh Posté le 12-03-2002 à 09:04:44    

héhé :)
 
mais fait gaffe car si ca plante c est souvent du a des fichiers de conf foireux la plupart du temps donc les backuper pour les remettre pas top ;)
 
trie les au moins par date tu pourras souvent voir a partir de kels modifs ca a chie.

 

[jfdsdjhfuetppo]--Message édité par R@NNIS--[/jfdsdjhfuetppo]


---------------
Mes News
Reply

Marsh Posté le 12-03-2002 à 09:08:28    

R@NNIS a écrit a écrit :

héhé :)
 
mais fait gaffe car si ca plante c est souvent du a des fichiers de conf foireux la plupart du temps donc les backuper pour les remettre pas top ;)
 
trie les au moins par date tu pourras souvent voir a partir de kels modifs ca a chie.  
 
 




 
Si ca plante, c'est parce qu'on s'est rendu compte qu'il y avait 30 volts (en spike) sur la prise de terre, les serveurs aiment pas  :p


---------------
Grrrrr...
Reply

Marsh Posté le 12-03-2002 à 09:10:28    

héhé c est pas top non plus ca ;)  
 
Z avez pas de salle serveur dediée avec un contrat specialisé de chez EDF ? disons ligne speciale ou trop petite boite ?

 

[jfdsdjhfuetppo]--Message édité par R@NNIS--[/jfdsdjhfuetppo]


---------------
Mes News
Reply

Marsh Posté le 12-03-2002 à 09:12:09    

R@NNIS a écrit a écrit :

héhé c est pas top non plus ca ;)  
 
Z avez pas de salle serveur dediée avec un contrat specialisé de chez EDF ? disons ligne speciale ou trop petite boite ?  
 
 




 
La salle des serveurs (ca fait seulement 4 mois qu'on a des UPS) est reliee sur la boite electrique normale. Si la cafetiere fait sauter les plombs, y'a plus de courrant en salle machine. Formidable non?  [:tdk04]


---------------
Grrrrr...
Reply

Marsh Posté le 12-03-2002 à 09:13:35    

héhé pas de café alors :D


---------------
Mes News
Reply

Marsh Posté le 12-03-2002 à 09:14:19    

R@NNIS a écrit a écrit :

héhé pas de café alors :D  




 
 :non:  :lol:


---------------
Grrrrr...
Reply

Marsh Posté le 12-03-2002 à 09:18:27    

[:tdk04]


---------------
Mes News
Reply

Marsh Posté le 12-03-2002 à 13:50:39    

R@NNIS a écrit a écrit :

lol ouaip c est simple ca :D
 
en gros en version perl pas top propre tu pourrais faire un truc du genre .
--------------------------
#!/usr/bin/perl  
 
main();
 
Tu ne respectes pas les regles de l'indentation c'est i-li-sible !!
 
sub main
{
    $file = "/var/toto";
 
    open(FILE , $file);
    $i = 1;
 
    while (<FILE> )
    {
 chop;
 $tab[$i++]= $_;
    }
    $i--;
    while ($i)
    {
 printf("Saving file [%s] \n" , $tab[$i--]);
 system("echo ".$tab[$i]." "."Saved Succesfully." );
    }
    close (FILE);
 
}
---------------------
 
avec bien sur a la place du system ta commande sur chaque elem de ton fichier.
 
notre k il faut ke ton fichier source sois de cette tete la
 
----------
file1
file2
file3
----------
 
voila ;)
 
pas sorcier non plus la methode de manu  
 
 



Reply

Marsh Posté le 13-03-2002 à 00:48:34    

ouaip lol ben le copier coller a chier donc pas d indentation lol
 
tu copie colle sous emacs tu vas au debit de la premiere { et tu fais Ctrl + Q  et hop tout indenté...

 

[jfdsdjhfuetppo]--Message édité par R@NNIS--[/jfdsdjhfuetppo]


---------------
Mes News
Reply

Marsh Posté le 13-03-2002 à 13:35:52    

En bash, tu peut utiliser find + cpio + gzip ou find + [r,s]cp
 
Si tu utilise cpio, ça donne  un truc du style
 
find / -path '/proc/*' -prune -o -path '/tmp/*' -prune -o -path '/boot' -prune -o -path '/home/*' -prune -o -print | cpio -H newc -ov | gzip -9v > /home/cpio/slash_cpio.gz
 
-path permet d'exclure les rep. à ne pas sauvegarder (/boot car il vaut mieux faire un cpio séparé pour être sûr de le retaurer au début du disque) /tmp pour éviter les fioritures.
 
Encsuite gzip pour gagner de la place :eek: ;) mais ça impose une FIFO pour décompresser car cpio ne sait pas décompresser et extraire en même temps
 
Donc pour restaurer ta sauvegarde : (attention, pas de moyen pour restaurer tel ou tel fichier, il faut tout restaurer puis recopier ce qui manque !)
 
mkfifo /tmp/fifo
gzip -dc /REP_du_cpio/slash_cpio.gz & #dezippage du cpio
cpio -idv --no-absolute-filenames < /tmp/fifo #décpio-isation du cpio ;)
 
 
 
Sinon si c'est un copie sélective fichier / fichier il faudrait effectivement utilise awk (connais pas assez :( ) ou simplement sed
 
un truc genre:
 
NB_LINES=`wc -l file_liste`
CPT=
CHAINE=
while [ $NB_LINES -lt $CPT ]
do
  CHAINE=`sed -e ''$CPT'p' file_liste`  # permet de récupérer la ligne $CPT du fichier  
  rcp $CHAINE host: /BACKUP
  CPT=$[$CPT+1]     # me souviens jamais comment fonctionne let :D (let CPT++  :??: )
 
done
 
C'est assez lent à cause de sed et c'est de tête si sed  fonctionne pas, dis le j'ai un script qui tourne comme ça j'aurais qu'a le retrouver et à la poser ici.
 
 
Bon backup

 

[jfdsdjhfuetppo]--Message édité par Phoenix--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 13-03-2002 à 14:34:48    

salut,  
 
y a aussi:
 
#!/bin/bash
 
for a in `cat liste_des_files_a_sauver`
do
    cp $a /sauv
done

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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