recréer sa base RPM avec un script [script] - Linux et OS Alternatifs
Marsh Posté le 26-04-2002 à 20:28:38
tu peux detailler stp ?
sinon
toto=`grep machin truc.txt`
Marsh Posté le 26-04-2002 à 21:01:06
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 :
merci
[jfdsdjhfuetppo]--Message édité par Mjules le 26-04-2002 à 21:53:15--[/jfdsdjhfuetppo]
Marsh Posté le 26-04-2002 à 21:13:56
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]
Marsh Posté le 26-04-2002 à 21:18:14
plus precisement (testé)
head -n $num <fichier> | tail -1
Marsh Posté le 26-04-2002 à 21:26:50
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.
Marsh Posté le 26-04-2002 à 21:57:35
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 :
merci
Marsh Posté le 26-04-2002 à 22:41:37
variable=`awk 'NR==numéro'`
Marsh Posté le 27-04-2002 à 04:49:57
Je ne comprends pas trop ce que tu cherches à faire dans ton script mais je peux te proposer quelques améliorations possibles :
Code :
|
De cette manière, tu auras le contenu ligne par ligne du fichier listerpm dans $ligne à chaque passage dans la boucle.
Code :
|
et si tu veux executer quelque chose si le fichier est trouvé, rajoute
Code :
|
Mais précise un peu plus ce que tu cherches à faire...
[jfdsdjhfuetppo]--Message édité par JBM le 27-04-2002 à 04:51:51--[/jfdsdjhfuetppo]
Marsh Posté le 27-04-2002 à 13:14:03
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]
Marsh Posté le 27-04-2002 à 13:23:37
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]
Marsh Posté le 29-04-2002 à 15:59:49
Les questions sont toujoutrs valable, est ce que vous voyez qql chose à améliorer ?
Marsh Posté le 29-04-2002 à 18:57:15
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"
Marsh Posté le 26-04-2002 à 20:05:25
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]
---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. | Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.