Parser un fichier csv en bash

Résolu
maxfbt -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

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

    A quoi sert le 'line="$monoccurrence"' ?
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      J'avais oublié... à quoi ressembles les entrées dans le fichier "fichiersource.csv" ?
      0
  2. maxfbt
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      hello
      il manque un
      \;
      à la fin du find,non ?
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Rhâ le boulet que je fais ;-((

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