IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Rechercher dans un fichier et copier la liste des fichiers


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Par défaut Rechercher dans un fichier et copier la liste des fichiers
    bonjour
    j'ai un fichier en 1.csv avec séparateur ; et contenant çà:
    ext1.jpg a.jpg
    ext2.jpg a.jpg
    ext3.jpg a.jpg
    ext4.jpg b.jpg
    ext5.jpg b.jpg
    ext6.jpg c.jpg
    j'aimerais :
    si sur la colonne 2 le fichier a.jpg existe dans le répertoire ça copie a.jpg en ext1.jpg ext2.jpg ext3.jpg
    la même chose pour b.jpg ça copie en ext4.jpg ext5.jpg
    ect..
    je pensais utiliser awk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F";" '{print $1 $2}'
    mais je ne sais comment faire après
    merci pour votre aide

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 44
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while IFS=';' read -a fichiers
    do
      [ -f "${fichiers[1]}" ] && cp "${fichiers[1]}"  "${fichiers[0]}"
    done < fichier

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Par défaut
    ca ne marche pas j'ai cette erreur
    : syntax error: bad substitution

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 44
    Par défaut
    Quel shell utilises-tu ?
    Peux-tu montrer ton script ?

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Par défaut
    j'ai essayé plutot ce fichier refint.sh car je comprends mieux le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #!/bin/sh
    rep_txt=/volume1/test/
    fich=1b.csv
    while read line
    do
    f_s=`echo $line | awk -F";" '{ print $1 }'`
    f_d=`echo $line | awk -F";" '{ print $0 }'`
    if (-e $f_s)
    then {cp $rep_txt$f_s $rep_txt$f_d".jpg"}
    fi
    done < $rep_txt$fich
    mais ca me génère cette erreur
    /volume1/test/refint.sh: line 17: -e: not found

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 44
    Par défaut
    1. Ne dis pas que ça ne marche pas si tu changes le code
    2. donne plus d'informations

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/sh
    rep_txt=/volume1/test/
    fich=1b.csv
    while IFS=';' read f_d f_s
    do
    [ -e "${rep_txt}${f_s}" ] && cp "${rep_txt}${f_s}" "${rep_txt}${f_d}.jpg"
    done < "${rep_txt}${fich}"

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bigs3232 Voir le message
    j'ai essayé plutot ce fichier refint.sh car je comprends mieux le code
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/sh
    rep_txt=/volume1/test/
    fich=1b.csv
    while read line
    do
    f_s=`echo $line | awk -F";" '{ print $1 }'`
    f_d=`echo $line | awk -F";" '{ print $0 }'`
    if (-e $f_s)
    then {cp $rep_txt$f_s $rep_txt$f_d".jpg"}
    fi
    done < $rep_txt$fich
    mais ca me génère cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /volume1/test/refint.sh: line 17: -e: not found
    Salut

    Tu ne sais donc pas qu'un "test -e fic" peut s'écrire aussi [ -e fic ] mais certainement pas (-e fic ) ??? Et je ne vois pas ce que viennent faire ces accolades !!!

    Accessoirement, si le fichier se trouve dans le dossier "rep_txt", alors il faut l'inclure dans le test...

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/sh
    rep_txt=/volume1/test
    fich=1b.csv
    while read line
    do
        f_d=`echo "$line" | cut -f1 -d\;`
        f_s=`echo "$line" | cut -f2 -d\;`
     
        [ -e "$rep_txt/$f_s" ] && cp "$rep_txt/$f_s" "$rep_txt/$f_d"
    done < "$rep_txt/$fich"
    Ce qui, à peu de choses près, est exactement le même code que celui de chardclo.

    Accessoirement, je préconiserais plutôt le test -f car pour copier un fichier, faut non seulement qu'il existe mais qu'en plus ce soit un fichier régulier (ce que ne dit pas "test -e")...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/02/2009, 17h58
  2. Réponses: 9
    Dernier message: 21/08/2007, 08h22
  3. Réponses: 4
    Dernier message: 11/07/2007, 19h28
  4. Réponses: 4
    Dernier message: 04/01/2007, 19h30
  5. Réponses: 9
    Dernier message: 27/10/2005, 22h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo