| |||||
FORUM HardWare.fr

Linux et OS Alternatifs

[scripte] Executer une commande pour chaque element d'un fichier...| Dernière réponse | |
|---|---|
| Sujet : [scripte] Executer une commande pour chaque element d'un fichier... | |
| grungy | salut, y a aussi: #!/bin/bash for a in `cat liste_des_files_a_sauver` do cp $a /sauv done |
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| grungy | salut, y a aussi: #!/bin/bash for a in `cat liste_des_files_a_sauver` do cp $a /sauv done |
| Phoenix | 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] |
| R@NNIS | 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] |
| el tarlo |
|
| R@NNIS | [:tdk04] |
| TheKtulu |
|
| R@NNIS | héhé pas de café alors :D |
| TheKtulu |
|
| R@NNIS | 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] |
| TheKtulu |
|
| R@NNIS | 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] |
| TheKtulu |
|
| R@NNIS | vi bien plus simple ;)
je croyais ke tu voulais faire un truc plus pointu ;) |
| TheKtulu | Je prefere la single line de Manu sois dit en passant [:thektulu] |
| R@NNIS | 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] |
| TheKtulu |
|
| the real manu | heu...
cp `cat fichier` rep/ :??: c ça que tu veux faire ? |
| TheKtulu |
|
| R@NNIS | 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. |
| TheKtulu |
|
| R@NNIS | 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 . |
| TheKtulu | :heink: :bounce: |
| TheKtulu | 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. |


