Executer une commande pour chaque element d'un fichier... [scripte] - Linux et OS Alternatifs
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
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
Vais voir si qq a deja eu le cas en shell script.
Merci qd meme
Marsh Posté le 12-03-2002 à 08:45:17
heu...
cp `cat fichier` rep/
c ça que tu veux faire ?
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 ? |
Comme quoi c'est si simple des fois, merci
Marsh Posté le 12-03-2002 à 08:50:20
lol ouaip c est simple ca
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]
Marsh Posté le 12-03-2002 à 08:51:34
Je prefere la single line de Manu sois dit en passant
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 |
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 ]) Comme ca, si y'a un pepin, j'ai tous mes fichiers conf sous la main, reinstallation rapide su un crash disk arrive.
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]
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
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?
Marsh Posté le 12-03-2002 à 09:14:19
R@NNIS a écrit a écrit : héhé pas de café alors |
Marsh Posté le 12-03-2002 à 13:50:39
R@NNIS a écrit a écrit : lol ouaip c est simple ca 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 |
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 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 (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]
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
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...