|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() irwin Analyste d'exploitation Inscription : janvier 2012 Messages : 83 ![]() |
Bonjour,
Voilà 2 jours que je cherche déjà de manière théorique et un peu en pratique sans grand succès pour mon faible niveau en shell, la manière de traiter une liste de fichier à partir d'une liste txt . Je reçoit un fichier quotidien txt recensant des centaines (stock/nbr de vente...) de fichier sur une machine à trier actuellement...à la main. Et en fonction de ces fichiers ils doivent être classé sur différentes partitions avec un dossier à créer ou, si déjà existant sur celles ci, simplement le déplacer. Le gros hic est que je dois exclure les numéros et caractère speciaux présent dans la liste (fichier numéroté dans le nom et malheureusement ce n'est pas une date...) ou dans le cas contraires lire le contenu du répertoire d'arrivée. les noms se présentes sous la forme suivante: Stockcentralparis001 Stock externe 0054... Journee_154_brest Comme je recommence un script de zéro, j'ai déjà testé une fois dans le dossier principal de refaire une liste basique et en lui attribuant le simple droit de lecteur pour que le script ne modifie rien, mais le soucis se passe sur la lecture du contenu, rien ne se passe. J'ai testé quelque chose en très basique et un peu brute. Code :
Mon read ne retourne rien pour la suite. J'ai cherché un peu avec xarg mais ne j'ai rien trouvé d'applicable pour lire le contenu et ensuite lancer un traitement du type " if = 1 (existe déja) move and increase sans créer de dossier if = 0 (n'existe pas) créer le dossier & move" |
||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : février 2008 Messages : 2 755 ![]() |
Bonjour,
la commande interne read lit des données depuis l'entrée standard; pas depuis un fichier (pas toute seule : Comment lire/parcourir un fichier) |
|
|
10
|
|
|
#3 | ||
|
Membre du Club
![]() irwin Analyste d'exploitation Inscription : janvier 2012 Messages : 83 ![]() |
Donc oui après avoir lu le poste (merci pour le lien)
je dois partir sur une boucle avec while, le problème restant qui ne pourra pas faire avancer le projet est, y a t'il moyen de ne pas tenir compte des caractères spéciaux ou des numéros de la lecture. je pensais faire l'exception avec mais le soucis est que j'ai du mal à la construction "complexe" avec cette commande. Une base plus propre: Code :
|
||
|
|
10
|
|
|
#4 |
![]() ![]() Inscription : février 2008 Messages : 2 755 ![]() |
qu'entends-tu exactement par «ne pas tenir compte des caractères spéciaux ou des numéros de la lecture»
les numéros, je vois bien; mais les «caractères spéciaux» pas forcément comme toi tu peux nous montrer un avant/après, s'il te plaît. |
|
|
10
|
|
|
#5 |
|
Membre du Club
![]() irwin Analyste d'exploitation Inscription : janvier 2012 Messages : 83 ![]() |
Disons que la j'en ai pas 36 il s'agit de: - _ [ ] % j'ai dû faire le tour des plus utilisés dans les noms de fichiers.
Travaillant avec beaucoup de distributeur et client c'est à moi d'adapter le traitement et non de faire une normalisation des noms de fichiers plus tôt casse tête car tout le monde n'a pas la même façon de les traités avant la réception sur mes machines. Je dois les exclure avec les numéros pour le classement ne répertoire portant le même nom. Qu'il voit enfaîte le nom comme si c’était des espaces partout... Gestion_de_stock ou gestion%de%stock resterai interpréter en Gestion de stock. Ou alors faire un rename en remplaçant les caractère par des espaces... Les fichiers sont après traités à partir de personnes ayant peu de connaissances informatique et mit à disposition de services sur des répertoires sous windows. Il y a déjà une automatisation où, une fois le fichier rangé et au bon format, un script ftp les récupères simplement. Ayant récupéré le poste il y a peu j'essai de faire une automatisation au lieu de tout faire à la main (et ca me prend une bonne matinée pour traiter 2 à 3 jours) |
|
|
00
|
|
|
#6 | |||||
|
Membre Expert
![]() Inscription : avril 2008 Messages : 799 ![]() |
Citation:
Veux-tu dire (en pseudo-pseudo-code): Code :
|
|||||
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() Inscription : avril 2008 Messages : 799 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() irwin Analyste d'exploitation Inscription : janvier 2012 Messages : 83 ![]() |
alors j'essai de faire simple
sdb1 = arriver de tout les fichiers en vracs fichier = tout type de nom et de format nom différent = toto_test_[1] / toto%test%01 / toto_-_test_005 en exemple de nom format = txt ou csv (cela importe peu c'est le nom qui joue) sda6 = partition ou mettre à dispo les fichiers pour la récupération vers windows Donc le matin je m'amuse à me rendre sur sdb1 trier et corriger le nom des fichiers en "toto test 01" pour aller les placer dans le bon répertoire sur sda6 sachant que le script de récupération ne prend en compte pas ceux avec un autre format que celui corriger... Et en fonction des arrivés (tout les mois sda6 est sauvegardé et tout le contenu du repertoire de mise à dispo vidé) je dois recréer le dossier. Pour info c'est une plateforme sous ubuntu. |
|
|
00
|
|
|
#9 |
![]() ![]() Inscription : février 2008 Messages : 2 755 ![]() |
comment tu connais «le bon répertoire» ?
pourquoi des espaces (peu pratiques), et pas des soulignements ? |
|
|
00
|
|
|
#10 | ||
|
Membre du Club
![]() irwin Analyste d'exploitation Inscription : janvier 2012 Messages : 83 ![]() |
Je connais le bon répertoire par nom en faisant à la main. donc ca serai quelque chose d'un peu lourd à faire... avec un ou pour trouver le répertoire avec le même nom...Le nom se trouverai car un dossier n'a pas d'extention. c'est ca qui est bien hardu à faire.
sinon il faudrait définir avec un Code :
Pourquoi pas d'underscore (soulignement) ? Car les gens passant sur les fichiers sous ce format, pour eux ce n'est pas bien traiter...d'où un soucis même en le leur disant par voix officiel (mon prédécesseur a essayé...) et d'un autre le script de récupération a été modifier pour cela...Il ne récupère plus que ceux avec espace, et je n'y ai pas accès pour voir comment ils ont mit ca en place il est lancé d'une autre plate forme (celle de destination réel) avec un appel ssh |
||
|
|
00
|
|
|
#11 | ||||
![]() ![]() Inscription : février 2008 Messages : 2 755 ![]() |
pour l'exemple :
Code :
Code :
|
||||
|
|
00
|
|
|
#12 |
|
Membre du Club
![]() irwin Analyste d'exploitation Inscription : janvier 2012 Messages : 83 ![]() |
Le problème du find avec l'exemple ci dessus est que la variable serai à répéter à partir de chaque ligne de la liste non ? Ayant une liste variable en nombre de ligne...j'ai un peu de difficulté à le voir sous script.
Après je peux voir a prendre la solution des underscore à la place des espaces et voir l'admin réseaux pour le script de récupération. Et pour les gens ont leur dira simplement c'est le nouveau format et pas de négociation, c'est déjà assé hardu à trouver le moyen de faire pour moi
|
|
|
00
|
|
|
#13 | |
![]() ![]() Inscription : février 2008 Messages : 2 755 ![]() |
Citation:
quelle variable ?
|
|
|
|
00
|
|
|
#14 | |||||
|
Membre Expert
![]() Inscription : avril 2008 Messages : 799 ![]() |
Citation:
Pour la correction des noms, j'aurais préféré que tu décrives ce que tu fais de la manière suivante: Code :
Pour le transfert: Code :
Peux-tu corriger en gardant la même présentation? Afin que nous puissions généraliser plus facilement, peux-tu rajouter quelques exemples? |
|||||
|
|
00
|
|
|
#15 |
|
Membre du Club
![]() irwin Analyste d'exploitation Inscription : janvier 2012 Messages : 83 ![]() |
Quand je parlais de variable je parlais pour chaque ligne du fichier comportant les noms en fait.
Le meilleur ordre serait de faire le changement de nom, refaire la liste et lancer la classification. |
|
|
00
|
|
|
#16 |
![]() ![]() Inscription : février 2008 Messages : 2 755 ![]() |
on peut tout faire d'un coup, sans fichier temporaire (et surtout sans ls).
donc,
il faut être précis. |
|
|
00
|
|
|
#17 | ||
|
Membre du Club
![]() irwin Analyste d'exploitation Inscription : janvier 2012 Messages : 83 ![]() |
Donc si je pars avec les morceaux fournis par vos soins et je vous en remercie grandement
![]() je partirai sur une base du genre (j'ai juste mis dans l'ordre d’exécution) Code :
en gros je me trouve sur sdb1/CFT/reception que je transfert vers sda6/MCT/Reporting Je peux pas réellement donner le nom réel des fichiers pour clause de confidentialité
|
||
|
|
10
|
|
|
#18 | ||
![]() ![]() Inscription : février 2008 Messages : 2 755 ![]() |
± le printf n'est là que pour montrer comment se déroule le remplacement de paramètre.
le cd n'est pas obligatoire tout se fait dans la boucle while. Code :
n'oublie pas de mettre en
|
||
|
|
10
|
|
|
#19 |
|
Membre du Club
![]() irwin Analyste d'exploitation Inscription : janvier 2012 Messages : 83 ![]() |
je teste ca au plus vite et reviens dire ce qu'il en est.
Un grand merci en tout cas pour l'aide la compréhension les réponses rapides et le temps que vous me libérez avec la solution rien que pour une seule semaine
|
|
|
00
|
|
|
#20 | ||||
|
Membre du Club
![]() irwin Analyste d'exploitation Inscription : janvier 2012 Messages : 83 ![]() |
Bon, je viens de le tester à mon domicile en jouant sur un DD externe en guise d'avoir pas mal de fichier avec les mêmes caractères ou autre que au boulot. (ubuntu aussi)
Code :
Code :
|
||||
|
|
10
|
Copyright © 2000-2013 - www.developpez.com