Parser un fichier csv en bash [Résolu/Fermé]

Signaler
-
Messages postés
35684
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
14 octobre 2020
-
Bonjour,
Comment puis-je scripter en shell ceci :

find . ! -regex ".*/\..*" -name "monoccurence.xml" -print -exec cp {} ~/Desktop/monrep \;


...en partant du principe que "monoccurence" sera lu dans un fichier csv de plusieurs lignes.
J'ai essayé ça mais :

#!/bin/sh
while IFS=';' read monoccurrence
do line="$monoccurrence"
   find . ! -regex ".*/\..*" -name "$monoccurrence" | cp {} ~/Desktop/monrep \;
done < fichiersource.csv


Le parsing marche mais pas la copie de fichier...
Un petit coup de pouce ne serait pas de refus !

Merci à vous.

Max

3 réponses

Messages postés
35684
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
14 octobre 2020
5 533
Salut,

Pourquoi tes deux commandes diffèrent ? (le pipe dans la seconde)

A quoi sert le 'line="$monoccurrence"' ?
Messages postés
35684
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
14 octobre 2020
5 533
J'avais oublié... à quoi ressembles les entrées dans le fichier "fichiersource.csv" ?
Merci pour ta réponse zipe31.

J'ai tenté de chaîner l'action de copier les fichiers avec un pipe.
En effet j'ai d'abord testé ça :

#!/bin/sh
while IFS=';' read monoccurrence
do line="$monoccurrence"
   find . ! -regex ".*/\..*" -name "$line" -print -exec cp {} ~/Desktop/monrep 
done < fichiersource.csv


Mais ça ne marche pas...
Le csv est composé d'un nom de fichier par ligne (toto.xml, titi.xml, tata.xml, etc.)
Mon script arrive bien à parser mon fichier csv et à trouver un fichier, mais je n'arrive pas exécuter la commande suivante, à savoir copier le fichier trouvé dans mon répertoire local.
Messages postés
35684
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
14 octobre 2020
5 533
Essaie de rajouter un echo devant la commande "cp" afin de voir ce qui pourrait clocher ;-\
#!/bin/sh
while IFS=';' read monoccurrence
do line="$monoccurrence"
   find . ! -regex ".*/\..*" -name "$line" -print -exec echo "cp {} ~/Desktop/monrep"
done < fichiersource.csv

Je me répète : A quoi sert le 'line="$monoccurrence"' ?
Messages postés
18226
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
11 octobre 2020
5 028
hello
il manque un
\;
à la fin du find,non ?
Messages postés
35684
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
14 octobre 2020
5 533
Rhâ le boulet que je fais ;-((

Merci dubcek ;-))
Merci zep31.
Le echo m'a permis de voir que le script dans sa version 1 marchait en réalité.
Merci encore pour votre aide.