[shell] script pour extraire les modules
Résolu/Fermé
laguigne
-
26 déc. 2008 à 09:20
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 26 déc. 2008 à 14:34
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 26 déc. 2008 à 14:34
A voir également:
- [shell] script pour extraire les modules
- Extraire une video youtube - Guide
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Extraire le son d'une vidéo - Guide
- Extraire image pdf - Guide
4 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
26 déc. 2008 à 10:06
26 déc. 2008 à 10:06
Salut,
find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko' -exec basename {} \; | sed -n 's/\..*//w /etc/modules.autoload.d/kernel-2.6'devrait le faire ;-))
arf merci :) c'est sympa de ta part, mais par contre, je n'ai pas compris.
moi je suis arrivé là:
find /lib/modules/2.6.26-gentoo-r4 -type f -iname '*.o' -or -iname '*.ko' | awk -F "/" '{print $NF}'
ça me donne le nom_du_module.ko
comment je pourrait faire avec awk pour lui demander d'afficher entre le dernier / et le .
par exemple avec /lib/modules/2.6.26-gentoo-r4/video/nvidia.ko
ce que j'ai fais me donne nvidia.ko puis que j'ai le / en séparateur, je sais que je pourrais enlever les 3 derniers caractères avec une option, mais la bonne démarche c'est plus extraire le champ entre / et . plutot sortir $NF -3 caractères.
toi tu prefères sed je vois, c'est une preference subjective ou c'est mieux de awk pour ce genre de manip?
je pose plein de questions :p j'apprends
merci en tout cas
moi je suis arrivé là:
find /lib/modules/2.6.26-gentoo-r4 -type f -iname '*.o' -or -iname '*.ko' | awk -F "/" '{print $NF}'
ça me donne le nom_du_module.ko
comment je pourrait faire avec awk pour lui demander d'afficher entre le dernier / et le .
par exemple avec /lib/modules/2.6.26-gentoo-r4/video/nvidia.ko
ce que j'ai fais me donne nvidia.ko puis que j'ai le / en séparateur, je sais que je pourrais enlever les 3 derniers caractères avec une option, mais la bonne démarche c'est plus extraire le champ entre / et . plutot sortir $NF -3 caractères.
toi tu prefères sed je vois, c'est une preference subjective ou c'est mieux de awk pour ce genre de manip?
je pose plein de questions :p j'apprends
merci en tout cas
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
26 déc. 2008 à 11:17
26 déc. 2008 à 11:17
arf merci :) c'est sympa de ta part, mais par contre, je n'ai pas compris.
-exec basename {} \;
Demande à find d'exécuter (-exec) la commande du shell "basename" (Éliminer le chemin d'accès et le suffixe d'un nom de fichier - man basename pour plus de détails) pour chaque argument trouver "{}"
| sed -n 's/\..*//w /etc/modules.autoload.d/kernel-2.6'
Puis de filtrer la sortie avec "sed" qui élimine (s/\..*//) tout ce qui se trouve derrière le point final, point y compris, et de l'écrire dans le fishier donné en paramètre à l'option "w" (write = écrire), dans ton cas le fichier "kernel-2.6" qui se trouve dans le répertoire "/etc/modules.autoload.d/"
L'as-tu essayé au moins ? A la limite, change le "w /etc/modules.autoload.d/kernel-2.6" par un fichier de test :
sed -n 's/\..*//w fichierètest.txt'
comment je pourrait faire avec awk pour lui demander d'afficher entre le dernier / et le .
-exec basename {} \;
Demande à find d'exécuter (-exec) la commande du shell "basename" (Éliminer le chemin d'accès et le suffixe d'un nom de fichier - man basename pour plus de détails) pour chaque argument trouver "{}"
| sed -n 's/\..*//w /etc/modules.autoload.d/kernel-2.6'
Puis de filtrer la sortie avec "sed" qui élimine (s/\..*//) tout ce qui se trouve derrière le point final, point y compris, et de l'écrire dans le fishier donné en paramètre à l'option "w" (write = écrire), dans ton cas le fichier "kernel-2.6" qui se trouve dans le répertoire "/etc/modules.autoload.d/"
L'as-tu essayé au moins ? A la limite, change le "w /etc/modules.autoload.d/kernel-2.6" par un fichier de test :
sed -n 's/\..*//w fichierètest.txt'
comment je pourrait faire avec awk pour lui demander d'afficher entre le dernier / et le .
awk -F"/" 'split($NF,t,".") { print t[1] }';-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
26 déc. 2008 à 11:20
26 déc. 2008 à 11:20
Salut,
find /lib/modules/$(uname -r) -type f -iname '*.o' -or -iname '*.ko' | sed 's/\.k*o//'
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
26 déc. 2008 à 11:26
26 déc. 2008 à 11:26
Fainéant ;-))
Le k* ne sert à rien, tu t'es fatigué pour rien ;-))
Le k* ne sert à rien, tu t'es fatigué pour rien ;-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
26 déc. 2008 à 11:30
26 déc. 2008 à 11:30
Ben, je ne pense pas.
Comme il suppose avoir des .ko et des .o alors k*o permet de reconnaître soit ko soit o (vu que le quantificateur * reconnaît zéro, une fois, autant de fois qu'il peut)
Je ne sait pas si le quantificateur ? (facultatif) existe en sed, puisque j'aurais écrit \.k?o
Comme il suppose avoir des .ko et des .o alors k*o permet de reconnaître soit ko soit o (vu que le quantificateur * reconnaît zéro, une fois, autant de fois qu'il peut)
Je ne sait pas si le quantificateur ? (facultatif) existe en sed, puisque j'aurais écrit \.k?o
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
26 déc. 2008 à 11:44
26 déc. 2008 à 11:44
Ben vu la gourmandise des regex, peu importe ce qui se trouve derrière, ko ou o, car je ne pense pas qu'on trouve des noms de modules composés avec des points (nvidia.3.6.ko), non ?
;-))
;-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
26 déc. 2008 à 11:47
26 déc. 2008 à 11:47
Tu proposes quoi alors?
Ca (point suit de n'importe quel caractère, n'importe combien de fois) ? \..*
Ca (point suit de n'importe quel caractère, n'importe combien de fois) ? \..*
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
26 déc. 2008 à 11:50
26 déc. 2008 à 11:50
Ben oui, c'est d'ailleurs la regex que j'ai employée dans mon 1er post :
sed -n 's/\..*//w /etc/modules.autoload.d/kernel-2.6';-))