[SHELL] modifier plusieurs fichiers à la fois

Fermé
raymond_domenech - 10 sept. 2008 à 09:19
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 10 sept. 2008 à 11:18
Bonjour,

J’ai des modifs de fichiers à faire en masse, je voudrais faire ça de façon automatique et propre, mais je ne maitrise pas assez le shell pour ça.

Donc je dois ajouter une ligne dans chaque fichier mais pas la même ligne a chaque fois, j’ai 1200 fichiers a modifier et j’ai 10 possibilités de modifs différente.

Donc j’ai déjà fait des matrices dans un tableur ou j’ai groupé les fichiers par modification a apporter.
Tout les fichiers concerné par la modifs 1 sont ensemble tout les fichiers concerné par la modifs 2 ensemble etc…

J’ai donc 10 matrices puisque 10 modifs différentes.

Et je voudrais faire un script qui lit dans mon tableur, et qui dit le nom de tel fichier figure dans la matrice 1 donc j’ajoute la ligne ‘ligne_1’ etc...

Le but de la démarche c’est vraiment d’apprendre à le faire pas avoir un script sur mesure.
A voir également:

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 897
10 sept. 2008 à 09:26
Salut,

Il nous faudrait un aperçu du contenu de ton tableur afin d'adapter au mieux le script (ou du moins t'aiguiller au mieux dans la réalisation) et un exemple de la structure de tes fichiers à modifier ainsi qu'un aperçu d'un fichier avant/après modification...
0
raymond_domenech
10 sept. 2008 à 10:18
salut et merci de ton aide

bon en fait il s'agit script d'ouverture de session en vbs que je voudrais modifier.
je me forme sous Linux en ce moment donc je voudrais faire la modif en shell, ça pourrait se faire autrement mais bon, je joins l'utile a l'agréable :)

donc dans le fichier en question qui a le nom d'inventaire d'un poste de travail du type : PC123456.vbs

dans ce fichier ce que je veux ajouter c'est une ligne à la fin pour monter une imprimante automatiquement.

la ligne c'est :

WshNetwork.AddWindowsPrinterConnection "\\serveur\imprimante"

donc j'ai un fichier avec dedans tout les scripts qui doivent récupérer par exemple l'imprimante IMP12345

donc la structure c'est un tableau une colonne avec dans chaque ligne les noms de scripts concernés, sans le chemin absolu, juste le nom du script.

je peux aussi changé ça et tout mettre dans un document d'un autre format si c'est la bonne méthode.

donc si PCXXXXXX.vbs fait partie de la liste1 j'ajoute WshNetwork.AddWindowsPrinterConnection "\\serveur\IMP123456"

s'il fait partie de la liste 2 j'ajoute WshNetwork.AddWindowsPrinterConnection "\\serveur\IMP654321" etc...

il y a 10 nouvelles machines et chaque pc doit avoir a l'ouverture de session au moins une de ces 10 machines donc j'ai créé un fichier ou je groupe des postes par rapport a leur proximité avec une de ces machines.

j'espère que c'est plus clair comme ça :)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 sept. 2008 à 10:51
En partant de ça :
donc si PCXXXXXX.vbs fait partie de la liste1 j'ajoute WshNetwork.AddWindowsPrinterConnection "\\serveur\IMP123456"

et en supposant que chaque liste (matrice) est un fichier différent, une solution serait de passer par une instruction "case ... esac".

A 1ère vue l'idée serait de lister le répertoire où se trouve les fichiers (1200) avec une boucle "for" :

for fich in *; do
...
...
done


A l'intérieur de cette boucle, récupérer la liste à laquelle appartient le fichier dans une variable (en supposant que les listes soit nommées liste1.txt, liste2.txt,etc.) :

result=$(grep -l 'nomfichier' liste*)


Puis en fonction de cette variable, appliquée la commande correspondant à l'instruction du case :

case "$result" in
list1)        echo "shNetwork.AddWindowsPrinterConnection "\\serveur\imprimante1" >> $fich
              ;;
list2)        echo "shNetwork.AddWindowsPrinterConnection "\\serveur\imprimante2" >> $fich
              ;;
...
...
list10)       echo "shNetwork.AddWindowsPrinterConnection "\\serveur\imprimante10" >> $fich
              ;;
esac
N'ayant pas tous les éléments en main et ne pouvant pas tester, je ne peux garantir que le résultat sera bon, mais d'après tes explications ça m'a l'air de correspondre.

Attends voir quand même d'autres avis ;-))

0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
10 sept. 2008 à 11:09
Heu...

Moi je dirais que comme tu as n tableaux contenant les fichiers et que tu sais quelle modif correspond à quel tableau, il faut trouver un moyen de parser ces tableaux

Eventuellement un export CSV, une fois que tu as 10 fichiers CSV, que tu sais quelle modification est à associer à quel fichier, tu n'as plus qu'à les parser comme suit

Lire Fichier_ajout_imprimante
Trouver le fichier de la machine
Modifier le fichier de la machine

et ainsi de suite, ça me parait plus simple que de trouver un fichier, voir s'il existe dans une des liste, et le modifier alors en conséquences...

++
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 sept. 2008 à 11:18
Ben moi je suis comme notre fruit bien aimé : UN GROS BOURRIN ;-DDD
0