Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 17/02/2014, à 10:43

L'Africain

Re : Ajouter une même ligne dans plusieurs fichiers (résolu)

ça marche lorsque je traite un seul fichier comme ça:

awk '{if(NR==1 &&/^Package:/) {print $1" "tolower($2)} else print}' control | sponge control

Mais intégré au script comme ça, ça marche plus :

for i in *.deb           # la variable i prendra tout les noms des fichiers deb du répertoire (c'est le début de ta boucle)
do
nom=${i%.deb}

#crée le dossier de travail avec le nom du .deb traité sans l'extension
mkdir $i

#décompresse le deb
dpkg-deb -x "$i" "$nom" 

#extrait le dossier DEBIAN	 
dpkg-deb -e "$i" "$nom/DEBIAN" 

# s'il n'y a pas de ligne avec "Section : Brother" on l'ajoute
if ! grep -q 'Section: Brother' "$nom/DEBIAN/control" 
then
      sed -i '5iSection: Brother' "$nom/DEBIAN/control" 
#suppression de majuscules du nom après Package:
awk '{if(NR==1 &&/^Package:/) {print $1" "tolower($2)} else print}' "$nom/DEBIAN/control" | sponge "$nom/DEBIAN/control"

# Re-création du deb ($i représente ton fichier deb) 
 dpkg-deb -b "$nom" "$i"        
fi
   rm -r "$nom"

done 

J'ai aussi rajouter ceci :

rm $nom/*.deb
rm $nom/*.rpm

après :

dpkg-deb -x "$i" "$nom" 

Parce que j'avais vu qu'il y avait un .deb dans le .deb ainsi qu'un .rpm. Autant néttoyer correctement ses .deb. Ici de nouveau quand j'applique rm ça fonctionne mais lorsque le .deb se reconstruit, il y intègre de nouveau le .deb et le .rpm, ce que je n'ai pas si je travaille seulement sur un .deb unique.

Dernière modification par L'Africain (Le 17/02/2014, à 11:02)


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#27 Le 17/02/2014, à 12:34

Postmortem

Re : Ajouter une même ligne dans plusieurs fichiers (résolu)

Euh... Tu changes les trucs sans trop comprendre !
Si tu fais ça :

for i in *.deb           # la variable i prendra tout les noms des fichiers deb du répertoire (c'est le début de ta boucle)
do
nom=${i%.deb}

#crée le dossier de travail avec le nom du .deb traité sans l'extension
mkdir $i
...
...
done

Le mkdir $i va vouloir créer un répertoire avec le même nom que le .deb car la variable i prend le nom d'un .deb à chaque tour de boucle (et donc là, tu dois avoir une erreur).
Normalement, la commande dpkg-deb -x "$i" "$nom" va créer le répertoire pour le .deb correspondant, pas besoin de créer manuellement. S'il faut le créer manuellement avant, c'est mkdir "$nom" qu'il faut faire et non mkdir $i.

Sinon, le awk que tu as rajouté est exécuté seulement s'il n'y a pas la ligne 'Section: Brother' dans le fichier control. Il faut donc mettre le awk et le dpkg-deb -b "$nom" "$i" après le fi.

Si ça ne fonctionne toujours pas, peux tu nous copier les lignes exactes (TOUTES les lignes ainsi que les résultats) que tu tapes lorsque tu travailles sur un seul .deb ?


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#28 Le 17/02/2014, à 12:59

L'Africain

Re : Ajouter une même ligne dans plusieurs fichiers (résolu)

Super !
Tout fonctionne, voici le script qui fonctionne avec les dernières modif, j'ai déplacé le awk et le dpkg-deb -b, et c'est ok, il enlève les majuscules et supprime les deb dans le deb :

for i in *.deb           # la variable i prendra tout les noms des fichiers deb du répertoire (c'est le début de ta boucle)
do
nom=${i%.deb}

#crée le dossier de travail avec le nom du .deb traité sans l'extension
mkdir $i

#décompresse le deb
dpkg-deb -x "$i" "$nom" 
rm $nom/*.deb
rm $nom/*.rpm
#extrait le dossier DEBIAN	 
dpkg-deb -e "$i" "$nom/DEBIAN" 

# s'il n'y a pas de ligne avec "Section : Brother" on l'ajoute
if ! grep -q 'Section: Brother' "$nom/DEBIAN/control" 
then
      sed -i '5iSection: Brother' "$nom/DEBIAN/control" 
    
fi
#suppression des majuscules du nom après "Package:"
awk '{if(NR==1 &&/^Package:/) {print $1" "tolower($2)} else print}' "$nom/DEBIAN/control" | sponge "$nom/DEBIAN/control"

# Re-création du deb ($i représente ton fichier deb) 
 dpkg-deb -b "$nom" "$i" 
   rm -r "$nom"

done 

En effet je fais certaines choses sans trop comprendre, mais tes explications postmortem, sont très pédagogiques, et donc je comprend bien mieux la logique après tes explications, encore merci, je crois qu'on peut dire que c'est vraiment résolu cette fois. En espérant que "reprepro" ne m'annonce pas de nouvelles erreurs lors de la création du dépôt!

Dernière modification par L'Africain (Le 17/02/2014, à 13:05)


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne