Parser un fichier csv en bash

Résolu/Fermé
maxfbt - 18 juil. 2013 à 12:40
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 18 juil. 2013 à 17:36
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
A voir également:

3 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
18 juil. 2013 à 13:25
Salut,

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

A quoi sert le 'line="$monoccurrence"' ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
18 juil. 2013 à 13:59
J'avais oublié... à quoi ressembles les entrées dans le fichier "fichiersource.csv" ?
0
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.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
18 juil. 2013 à 14:27
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"' ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 18/07/2013 à 15:42
hello
il manque un
\;
à la fin du find,non ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
Modifié par zipe31 le 18/07/2013 à 17:36
Rhâ le boulet que je fais ;-((

Merci dubcek ;-))
0
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.
0