Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4110 connectés 

 


Dernière réponse
Sujet : [script] recréer sa base RPM avec un script
Mjules pour ceux que ça intéresse, voilà le script que j'ai utilisé :
 
#!/bin/sh
 
dir *.rpm >/$HOME/listerpm
 
for ligne in `cat /$HOME/listerpm`; do
 rpm -ql --docfiles -p "$ligne" >/$HOME/listfich
 if test -s /$HOME/listfich
  then
   if locate `head -n 1 /$HOME/listfich`
    then echo "$ligne" >>/$HOME/listinst
   fi
  else rpm -ql -p "$ligne" >/$HOME/listfich
   if locate `head -n 1 /$HOME/listfich`
    then echo "$ligne" >>/$HOME/listinst
   fi
 fi
done
 
 
comme ça, je loupe le minimum de paquetages.
 
et ensuite, j'utilise la commande  
rpm -i --nodeps --justdb "/$HOME/listinst"

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Mjules pour ceux que ça intéresse, voilà le script que j'ai utilisé :
 
#!/bin/sh
 
dir *.rpm >/$HOME/listerpm
 
for ligne in `cat /$HOME/listerpm`; do
 rpm -ql --docfiles -p "$ligne" >/$HOME/listfich
 if test -s /$HOME/listfich
  then
   if locate `head -n 1 /$HOME/listfich`
    then echo "$ligne" >>/$HOME/listinst
   fi
  else rpm -ql -p "$ligne" >/$HOME/listfich
   if locate `head -n 1 /$HOME/listfich`
    then echo "$ligne" >>/$HOME/listinst
   fi
 fi
done
 
 
comme ça, je loupe le minimum de paquetages.
 
et ensuite, j'utilise la commande  
rpm -i --nodeps --justdb "/$HOME/listinst"
Mjules :bounce:
 
Les questions sont toujoutrs valable, est ce que vous voyez qql chose à améliorer ?
Mjules Voilà le script un peu amélioré:
 

#!/bin/sh

 
#il faut etre dans le dossier ou il y a les RPMS
#liste les RPMS et écrit la liste dans /$HOME/listerpm

 
dir *.rpm > /$HOME/listerpm
 
for ligne in `cat /$HOME/listerpm` ; do  # jusqu'à la dernière ligne de listerpm
[g]# je liste les fichiers de doc contenus dans la variable ligne et je les inscrit dans listfich

rpm -ql --docfiles -p "$ligne" >/$HOME/listfich
 
head -n 1 /$HOME/listfich>/$HOME/DOC1 # je lis la 1° ligne et je l'inscrit dans DOC1

 
if locate `cat DOC1`
 
then echo "$ligne" >>/$HOME/listinst # là, je veux écrire une ligne dans un fichier,à la suite des autres lignes et qui contient le texte de $ligne
fi
done
 
#maintenant je peux updater ma base avec les paquetages qui sont sur mon système
 
rpm -U --nodeps --justdb "/$HOME/listinst"

 

[jfdsdjhfuetppo]--Message édité par Mjules le 28-04-2002 à 21:20:00--[/jfdsdjhfuetppo]

Mjules merci pour toutes ces réponses;
 
ce que je cherche à faire, c'est à recréer ma base de donnée des paquetages installés parce que elle a planté et j'ai été obligé d'en recréer une vide.
Comme j'avais pas envie d'updater la base à la main avec tous les paquetages des CD d'install, je me suis dit pourquoi pas essayer de faire un script qui ferait ça.
 
+ de détails là :
http://forum.hardware.fr/forum2.ph [...] p=1&trash=
 
NB: j'ai utiliser la commande DIR parce qu'elle ne met pas d'étoiles à la fin des noms de fichiers. et LOCATE parce que ça cherche bien + vite que FIND

 

[jfdsdjhfuetppo]--Message édité par Mjules le 27-04-2002 à 13:29:13--[/jfdsdjhfuetppo]

JBM Je ne comprends pas trop ce que tu cherches à faire dans ton script mais je peux te proposer quelques améliorations possibles :
 

  • Pour lister des fichiers, utilise plutôt ls à la place de dir, on n'est pas chez Microsoft et même si cette commande est présente sur ta distribution, elle ne l'est pas forcément sur tous les Unix ;)


  • Au lieu d'utiliser une boucle while avec un compteur, utilise plutôt une boucle for de la forme :  
Code :
  1. for ligne in `cat /$HOME/listerpm`
  2. do
  3. ...
  4. done


 
De cette manière, tu auras le contenu ligne par ligne du fichier listerpm dans $ligne à chaque passage dans la boucle.
 

  • A la place du locate..., utilise la commande find avec pour syntaxe :
Code :
  1. find / --name <nom fichier>

et si tu veux executer quelque chose si le fichier est trouvé, rajoute

Code :
  1. --exec commande \;


 

  • Enfin, pour rajouter une ligne à la suite d'un fichier, utilise tout simplement la redirection ">>" et tu peux utiliser la commande cat pour afficher le contenu d'un fichier.


Mais précise un peu plus ce que tu cherches à faire...

 

[jfdsdjhfuetppo]--Message édité par JBM le 27-04-2002 à 04:51:51--[/jfdsdjhfuetppo]

Jar Jar variable=`awk 'NR==numéro'`
Mjules Bon je vais reposter le script pour qu'il soit un peu + lisible:
 

#!/bin/sh

 
#il faut etre dans le dossier ou il y a les RPMS
#liste les RPMS et écrit la liste dans /$HOME/listerpm

 
dir *.rpm > /$HOME/listerpm
 
num=1
 
while ligne $num de listrpm == 0 ; do  # jusqu'à ce que la   ligne n de listerpm soit vide  (chose que je ne sais pas écrire)
# je lis la n° ligne de listerpm et j'inscris sa valeur dans # le fichier RPM1

 
head -n $num /$HOME/listerpm | tail -1 >/$HOME/RPM1  
 
# je liste les fichiers de doc contenus dans le fichier RPM1
# et je les inscrit dans listfich

rpm -ql --docfiles -p "/$HOME/RPM1" >/$HOME/listfich
 
head -n 1 /$HOME/listfich>/$HOME/DOC1 # je lis la 1° ligne et je l'inscrit dans DOC1

 
if locate "DOC1"  # sauf que là, je sais pas l'écrire (parce que la commande là, elle marche pas   )
 
then ajouter "/$HOME/RPM1" /$HOME/listinst # là, je veux écrire une ligne dans un fichier,à la suite des autres lignes et qui contient le texte de RPM1
 
fi
num=$[$num+1]
done
 
#maintenant je peux updater ma base avec les paquetages qui sont sur mon système
 
rpm -U --nodeps --justdb "/$HOME/listinst"

 
Voilà, c'est fini, peut tu me dire quelles améliorations je peux y apporter et quelles commandes il faut que je tapes pour :

  • trouver un fichier dont le nom complet (chemin+nom) est dans un autre fichier
  • tester si une ligne est vide ou non
  • inscrire une ligne dans un fichier

merci

Mjules

nicotine a écrit a écrit :

pourquoi vouloir lire un numero de ligne ?  
 
peut etre existe t il une autre maniere d'apprehender le probleme ?  
 
sinon  
 
num=10
head $num fichier | tail -1  




 
Merci pour la réponse. J'écris mon script et dans 10 min je poste le pourquoi et le comment.

nicotine plus precisement (testé)  
 
head -n $num <fichier> | tail -1
nicotine pourquoi vouloir lire un numero de ligne ?  
 
peut etre existe t il une autre maniere d'apprehender le probleme ?  
 
sinon  
 
num=10
head $num fichier | tail -1

 

[jfdsdjhfuetppo]--Message édité par nicotine le 26-04-2002 à 21:16:14--[/jfdsdjhfuetppo]

Mjules en fait, je voudrais un truc qui permette de lire la n-ième  ligne d'un fichier texte et me la copier dans une variable
genre:
lire ligne1 mon_fichier > $variable
 
en fait, je cherche toujours à faire mon script pour refaire ma base des RPMS à partir de ceux de mon CD d'install et des fichiers présents sur mon dur.
 
pour l'instant, j'ai déjà (comme début de script) :

#!/bin/sh
 
#il faut etre dans le dossier ou il y a les RPMS
#liste les RPMS et écrit la liste dans /$HOME/listerpm
dir *.rpm > /$HOME/listerpm

là, j'arrive au point litigieux puisqu'il faut que je lise une ligne du fichier listerpm

num=1
while ligne $num de listrpm == 0 ; do  # jusqu'à ce que la   ligne n de listerpm soit vide  (chose que je ne sais pas écrire)
# je lis la n° ligne de listerpm et j'inscris sa valeur dans # le fichier RPM1
 
head -n $num /$HOME/listerpm | tail -1 >/$HOME/RPM1  
 
# je liste les fichiers de doc contenus dans le fichier RPM1
# et je les inscrit dans listfich
rpm -ql --docfiles -p "/$HOME/RPM1" >/$HOME/listfich
 
head -n 1 /$HOME/listfich>/$HOME/DOC1 # je lis la 1° ligne et je l'inscrit dans DOC1
 
if locate "DOC1"  # sauf que là, je sais pas l'écrire (parce que la commande là, elle marche pas :( )
then ajouter "/$HOME/RPM1" /$HOME/listinst # là, je veux écrire une ligne dans un fichier,à la suite des autres lignes et qui contient le texte de RPM1
 
fi
 
num=$[$num+1]
done
 
#maintenant je peux updater ma base avec les paquetages qui sont sur mon système
 
rpm -U --nodeps --justdb "/$HOME/listinst"
 

 
Voilà, c'est fini, peut tu me dire quelles améliorations je peux y apporter et quelles commandes il faut que je tapes pour :

  • trouver un fichier dont le nom complet (chemin+nom) est dans un autre fichier
  • tester si une ligne est vide ou non
  • inscrire une ligne dans un fichier


merci

 

[jfdsdjhfuetppo]--Message édité par Mjules le 26-04-2002 à 21:53:15--[/jfdsdjhfuetppo]

nicotine tu peux detailler stp ?  
 
sinon  
 
toto=`grep machin truc.txt`
Mjules Salut tout le monde
 
bon, ça y est, je me suis lancé, j'ai utilisé le script qui est en dernier topic. et c'est fait, ma base RPM est complètement refaite (pour la plus grande partie en tout cas, je peux pas vérifier pour tout les paquetages ;) )
 
Je tiens à remercier nicotine et JBM pour leurs conseils avisés.
MERCI
 
Message original:
Bonjour,
 
Je cherche une commande shell (ou un soft, je suis pas à ça pres) pour lire une ligne donnée dans un fichier texte et me l'envoyer dans une variable.
 
Merci

 

[jfdsdjhfuetppo]--Message édité par Mjules le 29-04-2002 à 19:24:14--[/jfdsdjhfuetppo]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)