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 :

Comparer noms de fichier et copier contenu dans MySQL


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut Comparer noms de fichier et copier contenu dans MySQL
    Bonjour,

    Je souhaite analyser un dossier comportant plusieurs fichiers de type suivant:

    nom_n°1_taille1_nom.txt
    nom_n°1_taille1_nom_est.txt
    nom_n°2_taille1_nom.txt
    nom_n°2_taille1_nom_est.txt
    ....

    Il faut comparer les noms entre eux, à savoir "nom_n°X_taille1_nom" et s'il les noms sont identique, il faut copier le contenu du fichier dans une requete SQL.

    J'ai commencé à faire se script en shell; mais cela ne convient pas totalement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    for fich1 in *; do
     
       # echo $fich1
     
        variable=$fich1
     
        fichier2=${variable##*1.txt}
        fichier3=${variable##*est.txt}
     
        echo $fichier2
        echo $fichier3    
     
        cmp -s $fichier2 $fichier3
     
        if [ $? -eq 0 ]; then
     
            TEMP=`mysql --user=root --password=xxxxxx <<MySCRIPT
     
       INSERT INTO test.taille VALUES ('', '1', '$fichier2', '$fichier3', '');
    #MySCRIPT`
     
     else
        echo NOK
        fi
     
    done
    Pour l'instant, le code ne prend pas en charge la lecture du contenu, il ne colle dans la base que le nom du fichier.

    Merci
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour

    1. cmp compare des contenus de fichiers, pas leurs noms. Pour comparer des chaines faut utiliser test.
    2. je en vois pas à quoi sert la variable "variable" vu qu'elle a le même contenu que la variable "fich1"
    3. je ne vois pas à quoi sert la variable "TEMP" que tu n'utilises pas. Accessoirement les noms en majuscules sont réservés aux variables système.
    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]

  3. #3
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour,

    je propose de faire de la manipulation de fichier texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ cat /tmp/testsql.txt
    nom_n°1_taille1_nom.txt
    nom_n°1_taille1_nom_est.txt
    nom_n°2_taille1_nom.txt
    nom_n°2_taille1_nom_est.txt
    $ sed 's/\.\([^\.]*\)$/_\1/' /tmp/testsql.txt | awk -F'_' '{a[$1_$2_$3_$4]++;r[$1_$2_$3_$4]=r[$1_$2_$3_$4]$0";"} END{for (i in a) if (a[i]>1) print r[i]}'|sed 's/_\([^_]*\);/.\1;/g'
    nom_n°1_taille1_nom.txt;nom_n°1_taille1_nom_est.txt;
    nom_n°2_taille1_nom.txt;nom_n°2_taille1_nom_est.txt;
    Une fois qu'on arrive là, il est facile de créer des requêtes sql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sed 's/\.\([^\.]*\)$/_\1/' /tmp/testsql.txt | awk -F'_' '{a[$1_$2_$3_$4]++;r[$1_$2_$3_$4]=r[$1_$2_$3_$4]$0";"} END{for (i in a) if (a[i]>1) print r[i]}'|sed 's/_\([^_]*\);/.\1;/g'|awk -F';' '{print "INSERT INTO test.taille VALUES ('\'\'', '\''1'\'', '\''"$1"'\'', '\''"$2"'\'', '\'\'');";}'
    INSERT INTO test.taille VALUES ('', '1', 'nom_n°1_taille1_nom.txt', 'nom_n°1_taille1_nom_est.txt', '');
    INSERT INTO test.taille VALUES ('', '1', 'nom_n°2_taille1_nom.txt', 'nom_n°2_taille1_nom_est.txt', '');
    Bonne chance!
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Si les champs variables ne contiennent pas de points, il y a plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ awk -F'[_.]' '{a[$1_$2_$3_$4]++;r[$1_$2_$3_$4]=r[$1_$2_$3_$4]$0";"} END{for (i in a) if (a[i]>1) print r[i]}' /tmp/testsql.txt|awk -F';' '{print "INSERT INTO test.taille VALUES ('\'\'', '\''1'\'', '\''"$1"'\'', '\''"$2"'\'', '\'\'');";}'
    INSERT INTO test.taille VALUES ('', '1', 'nom_n°1_taille1_nom.txt', 'nom_n°1_taille1_nom_est.txt', '');
    INSERT INTO test.taille VALUES ('', '1', 'nom_n°2_taille1_nom.txt', 'nom_n°2_taille1_nom_est.txt', '');
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    J'ai écris le code ci dessous (loin d'être parfait), qui me copie le contenue des fichiers dans la base lorsque les noms des fichiers sont les moins (moins la partie "est.txt"):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    for fichier in *est.txt; do
        for fichier1 in *1.txt; do
     
            fichier3=$(basename -s est.txt $fichier)
            fichier2=$(basename -s .txt $fichier1)
     
            echo fichier 1 = $fichier3
            echo fichier 2 = $fichier2
     
            if [ "$fichier3" = "$fichier2" ]
                then
     
                A="$(cat $fichier)"
                B="$(cat $fichier1)"   
     
     
                v="taille1"
                if [[ "$A" =~ $v ]]
                then
                taille="2"
     
                TEMP=`mysql --user=root --password=xxxxx <<MySCRIPT
     
       INSERT INTO test.taille VALUES ('', '$taille', '$A', '$B', '');
    MySCRIPT`
     
        fi   
        fi
     
        done 
    done
    Ensuite, j'ai rajouté la seconde boucle if afin de pouvoir modifier automatiquement la variable "taille", de telle sorte que ci elle vaut taille1, cela soit égal à 2, et si elle vaut "taille3", cela soit égal à 3; mais le script ne la lis pas !

    merci
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    lorsque les noms des fichiers sont les moins
    Je ne comprends pas l'idée de cette proposition.

    Je ne comprends pas l'intérêt de ce script et le but final.

    Ne manque-t-il pas à la commande mysql l'option '-e' pour indiquer que tu vas écrire une requête SQL ? Je doute que cette commande marche en l'état.

    Pourquoi ne pas protéger $v par "$v" ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    lorsque les noms des fichiers sont les moins
    Je ne comprends pas l'idée de cette proposition.
    Il veut dire:
    lorsque les noms des fichiers sont les mêmes
    quoi que cela veuille dire...
    quoique pas beaucoup plus clair...

    (de la distinction entre "quoi que" et "quoique"...)

    Quoi? Que veut-il dire???

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cobra85 Voir le message
    Ensuite, j'ai rajouté la seconde boucle if
    Ouais t'as vachement bien fait de rajouter la boucle if. Tu peux même en rajouter une troisième au cas où
    Citation Envoyé par cobra85 Voir le message
    afin de pouvoir modifier automatiquement la variable "taille", de telle sorte que ci elle vaut taille1, cela soit égal à 2, et si elle vaut "taille3", cela soit égal à 3;
    C'est limpide !!!

    Citation Envoyé par cobra85 Voir le message
    mais le script ne la lit pas !
    Peut-être lui acheter des lunettes...

    Citation Envoyé par jack-ft Voir le message
    Citation Envoyé par cobra85 Voir le message
    Je souhaite analyser un dossier comportant plusieurs fichiers de type suivant:
    Il veut dire:
    lorsque les noms des fichiers sont les mêmes
    Ben lorsque deux fichiers d'un même dossier ont le même nom alors ils ne sont plus "deux" mais "un seul" tu ne crois pas ?

    Bon de toute façon vu la clarté dans ses explications, son souci du détail et sa motivation dans le suivi de ce topic vous aurez compris pourquoi je me désabonne. "boucle if" pfff... rien que de voir ça ça m'énerve...
    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]

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    Bonjour,


    @Sve@r:
    Ouais t'as vachement bien fait de rajouter la boucle if. Tu peux même en rajouter une troisième au cas où
    "boucle if" pfff... rien que de voir ça ça m'énerve...
    Si tu as une autre idée, je suis preneur ! (Je fais en fonction de mes connaissances, qui il est vrai en shell/bash sont plutôt limité) Si je demande de l'aide sur un forum, c'est que je ne sais pas, sinon où est l'intérêt.

    Le but du script est le suivant:

    J'ai un dossier qui contient des fichiers au format suivant:

    nom_n°1_taille1_nom.txt
    nom_n°1_taille1_nom_est.txt
    nom_n°2_taille1_nom.txt
    nom_n°2_taille1_nom_est.txt
    nom_n°1_taille2_nom.txt
    nom_n°1_taille2_nom_est.txt
    nom_n°2_taille2_nom.txt
    nom_n°2_taille2_nom_est.txt
    ...

    Le but, est de lire le contenu des fichiers nom_n°1_taille1_nom.txt, nom_n°1_taille1_nom_est.txt (et ainsi de suite) et de les insérer dans une base de données. Cette base, contient 5 champs: id, taille, contenu_fichier1, contenue_fichier2, used.

    Ensuite, le champ "taille" doit prendre la valeur 1 si le nom du fichier contient "taille1", la valeur 2 si le nom du fichier contient "taille2" ...

    Voici le script, qui à l'air de plutôt fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    #
    #!/bin/sh
     
    for fichier in *_est.txt; do
        for fichier1 in *nom.txt; do
     
            fichier3=$(basename -s _est.txt $fichier)
            fichier2=$(basename -s .txt $fichier1)
     
            if [ "$fichier3" = "$fichier2" ]
                then
     
                    A="$(cat $fichier)"
                    B="$(cat $fichier1)"   
     
    #Si la variable "taille1" est présente dans le nom de fichier3, alors $taille=1
                    var=$fichier3
     
                    if [ $(grep "taille1" <<<$var) ]
                        then
     
                           taille="1"
     
                           TEMP=`mysql --user=root --password=xxxxx <<MySCRIPT
     
       INSERT INTO test.taille VALUES ('', '$taille', '$A', '$B', '');
    MySCRIPT`
     
    #Si la variable "taille2" est présente dans le nom de fichier3, alors $taille=2                
                    elif [ $(grep "taille2" <<<$var) ]
                        then         
                           taille="2"
     
                           TEMP=`mysql --user=root --password=nicolas <<MySCRIPT
     
       INSERT INTO pgp.generation_clersa VALUES ('', '$taille', '$A', '$B', '');
    MySCRIPT`
                    fi
            fi
     
        done 
    done
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    Bonjour,


    @Sve@r:
    Ouais t'as vachement bien fait de rajouter la boucle if. Tu peux même en rajouter une troisième au cas où
    "boucle if" pfff... rien que de voir ça ça m'énerve...
    Si tu as une autre idée, je suis preneur ! (Je fais en fonction de mes connaissances, qui il est vrai en shell/bash sont plutôt limité) Si je demande de l'aide sur un forum, c'est que je ne sais pas, sinon où est l'intérêt.

    Le but du script est le suivant:

    J'ai un dossier qui contient des fichiers au format suivant:

    nom_n°1_taille1_nom.txt
    nom_n°1_taille1_nom_est.txt
    nom_n°2_taille1_nom.txt
    nom_n°2_taille1_nom_est.txt
    nom_n°1_taille2_nom.txt
    nom_n°1_taille2_nom_est.txt
    nom_n°2_taille2_nom.txt
    nom_n°2_taille2_nom_est.txt
    ...

    Le but, est de lire le contenu des fichiers nom_n°1_taille1_nom.txt, nom_n°1_taille1_nom_est.txt (et ainsi de suite) et de les insérer dans une base de données. Cette base, contient 5 champs: id, taille, contenu_fichier1, contenue_fichier2, used.

    Ensuite, le champ "taille" doit prendre la valeur 1 si le nom du fichier contient "taille1", la valeur 2 si le nom du fichier contient "taille2" ...

    Voici le script, qui à l'air de plutôt fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    #
    #!/bin/sh
     
    for fichier in *_est.txt; do
        for fichier1 in *nom.txt; do
     
            fichier3=$(basename -s _est.txt $fichier)
            fichier2=$(basename -s .txt $fichier1)
     
            if [ "$fichier3" = "$fichier2" ]
                then
     
                    A="$(cat $fichier)"
                    B="$(cat $fichier1)"   
     
    #Si la variable "taille1" est présente dans le nom de fichier3, alors $taille=1
                    var=$fichier3
     
                    if [ $(grep "taille1" <<<$var) ]
                        then
     
                           taille="1"
     
                           TEMP=`mysql --user=root --password=xxxxx <<MySCRIPT
     
       INSERT INTO test.taille VALUES ('', '$taille', '$A', '$B', '');
    MySCRIPT`
     
    #Si la variable "taille2" est présente dans le nom de fichier3, alors $taille=2                
                    elif [ $(grep "taille2" <<<$var) ]
                        then         
                           taille="2"
     
                           TEMP=`mysql --user=root --password=nicolas <<MySCRIPT
     
       INSERT INTO pgp.generation_clersa VALUES ('', '$taille', '$A', '$B', '');
    MySCRIPT`
                    fi
            fi
     
        done 
    done
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cobra85 Voir le message
    Si tu as une autre idée, je suis preneur ! (Je fais en fonction de mes connaissances, qui il est vrai en shell/bash sont plutôt limité) Si je demande de l'aide sur un forum, c'est que je ne sais pas, sinon où est l'intérêt.
    Mais putain il ne s'agit pas d'un problème de "connaissance" mais de "réflexion". Une "boucle" sert à "boucler" (à répéter une instruction ou un ensemble d'instructions). Depuis quand if a-t-il ce rôle ? Donc voilà, si tu ne fais pas l'effort minimum de réfléchir au sens des mots que tu emploies ne te plains pas si tu te fais alors jeter !

    Citation Envoyé par cobra85 Voir le message
    Ensuite, le champ "taille" doit prendre la valeur 1 si le nom du fichier contient "taille1", la valeur 2 si le nom du fichier contient "taille2" ...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    taille=$(echo "$nom" |sed -e "s/^.\{0,\}taille\(.\).\{0,\}$/\1/")

    Citation Envoyé par cobra85 Voir le message
    Voici le script, qui à l'air de plutôt fonctionner
    Oui de "marchotter" plutôt. Déjà je remarque que tu n'as tenu aucun compte de mon premier post dans lequel je demandais à quoi sert la variable "TEMP" inutilisée et ça aussi c'est insupportable. Je te retourne donc la question que tu m'as posé: où est l'intérêt de venir sur un forum si tu négliges ce qui t'y est dit ?

    Donc tu fais une boucle sur chaque fichier "est.txt" puis une autre sur chaque fichier "nom.txt". Donc pour 100 fichiers (séparés en 2 groupes de 50) tu auras 2500 itérations. Tu trouves ça rentable ? Si encore les fichiers étaient aléatoires je veux bien mais là ils se suivent !!! Tu peux alors les prendre deux par deux !!!

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
    for fichier2 in *.txt
    do
        if test -z "$fichier1"
        then
            fichier1="$fichier2"
            continue
        fi
        ... (traitement fichier1 et fichier2 et insertions en bdd)...
        unset fichier1
    done
    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]

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    Salut,

    Si je ne prend que l'extension dans la boucle for, je ne peux pas comparer mes deux noms de fichier, il faut que je puisse comparer la partie identique, à savoir "nom_n°1_taille1_nom"

    Et dans le cas ou celle-ci corresponde, copier le contenue respectif des fichiers et les insérer dans la base.
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cobra85 Voir le message
    Si je ne prend que l'extension dans la boucle for, je ne peux pas comparer mes deux noms de fichier, il faut que je puisse comparer la partie identique, à savoir "nom_n°1_taille1_nom"
    Pffff, tu n'as même pas essayé ce script ne serait-ce qu'avec un simple "echo" !!!
    Je ne prends pas l'extension, je prends tous les fichiers (plus précisément ceux dont le nom se termine par ".txt" mais comme je pense qu'il n'y a que ça...). Donc tous les fichiers seront traités. Les fichiers nom_n°X_tailleY_nom.txt et aussi les fichiers nom_n°X_tailleY_nom_est.txt !!!

    Citation Envoyé par cobra85 Voir le message
    Et dans le cas ou celle-ci corresponde, copier le contenue respectif des fichiers et les insérer dans la base.
    Ils correspondront forcément deux à deux puisqu'ils seront traités par ordre alphabétique. A la première itération, la variable fichier1 contiendra "nom_n°X_tailleY_nom.txt" (la variable fichier2 aussi mais c'est pas grave puisque la boucle remonte immédiatement) et à la seconde itération la variable fichier2 contiendra "nom_n°X_tailleY_nom_est.txt" tandis que la variable fichier1 n'aura pas été changée. Le traitement peut alors s'effectuer avec les deux noms correspondants entre eux. Et ceci sans même avoir besoin de le vérifier. Puis la variable "fichier1" est effacée ce qui permet au script de détecter qu'il va avoir à traiter deux nouveaux fichiers.
    Ca présuppose toutefois que le dossier ne contienne que des fichiers de ce type... ou alors que leurs noms soit suffisemment explicite pour qu'on puisse les filtrer facilement

    PS: il y a une énorme faute d'orthographe dans ta signature. Le plus navrant c'est que le même verbe employé dans le même contexte est une fois bien écrit et une fois mal. Comment peut-on être aussi laxiste ???
    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]

  14. #14
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    [HS chipotage]
    Citation Envoyé par Sve@r Voir le message
    PS: il y a une énorme faute d'orthographe dans ta signature. Le plus navrant c'est que le même verbe employé dans le même contexte est une fois bien écrit et une fois mal.
    toute petite remarque: je n'aime pas trop le terme "faute" qui sous-entend une "fautivité" (avec une sorte de jugement moral (de la culpabilité, quoi!)). Je préfère le terme plus neutre d'"erreur"!
    De plus, j'aurais plutôt tendance à réserver le terme "hortaugraf" à la manière d'écrire un mot, en dehors de toute règle grammaticale.
    Lorsqu'il s'agit manifestement de remplacer un participe passé par un impératif, je décrirais plutôt ceci comme une erreur grammaticale.

    Sinon, je comprends ton agacement lorsque tu fais des efforts pour aider quelqu'un et que la personne ne tient pas compte de tes préconisations!
    Je compatis!
    [/HS chipotage]

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    toute petite remarque: je n'aime pas trop le terme "faute" qui sous-entend une "fautivité" (avec une sorte de jugement moral (de la culpabilité, quoi!)). Je préfère le terme plus neutre d'"erreur"!
    Non, tu sais bien que les mots ont plusieurs nuances. Surtout que le dictionnaire définit "faute d'orthographe" (en un tout) comme "erreur dans la rédaction". En associant l'orthographe à la nature de la faute on assouplit donc l'effet extrème que le terme aurait eu sans ça
    Toutefois il y a "faute" et "faute". Je n'ai rien dit sur son "si je ne prend" de son dernier post (inattention, bénéfice du doute, etc) mais son impératif transformé en participe passé m'a trop fait saigner les yeux. En fait c'est franchement une sensation horrible quand le sens des mots va à l'encontre du sens de la phrase. Le cerveau qui assimile tranquillement ce qui est lu, presque en état de douce quiétude, se prend d'un coup comme un coup de fouet. Forcément on en veut à celui qui a provoqué cette réaction et on est de suite moins amical
    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]

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    Voici le fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    for fichier2 in *.txt; do
     
            if test -z "$fichier1"
                then
                    fichier1="$fichier2"
     
                    continue
     
            fi
            echo fichier1 = $fichier1
            echo fichier2 = $fichier2        
     
            contenu_fichier1="$(cat $fichier1)"
            contenu_fichier2="$(cat $fichier2)"
     
            if [ $(grep "taille1" <<<$fichier2) ]
                then
                taille="1"
     
            `mysql --user=root --password=xxxx <<MySCRIPT
     
       INSERT INTO test.taille VALUES ('', '$taille', '$contenu_fichier2', '$contenu_fichier1', '');
    MySCRIPT`
            elif [ $(grep "taille2" <<<$fichier2) ]
                                then         
     
                           taille="2"
                    `mysql --user=root --password=xxxx <<MySCRIPT
     
       INSERT INTO test.taille VALUES ('', '$taille', '$contenu_fichier2', '$contenu_fichier1', '');
    MySCRIPT`
     
    fi
            unset fichier1
     
     
    done
    Merci à vous
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  17. #17
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Bonjour,

    Voici un script fonctionnel sur ce que tu as besoin de récupérer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/sh
     
    for i in nom_n°[0-9]*_taille[0-9]*_nom.txt
    do
    	j=${i%.txt}_est.txt
    	if [ -f $j ]
    	then
    		t=${i#*taille}
    		t=${t%_*}
    		echo "fichier1:$i"
    		echo "fichier2:$j"
    		echo "taille:$t"
    	fi
    done
    Pour le répertoire suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ ls -1
    nom_n°3_taille2_nom.txt
    nom_n°5_taille1_nom_est.txt
    nom_n°5_taille1_nom.txt
    nom_n°5_taille2_nom_est.txt
    nom_n°5_taille2_nom.txt
    nom_n°6_taille1_nom_est.txt
    nom_n°6_taille1_nom.txt
    nom_n°6_taille2_nom_est.txt
    nom_n°6_taille2_nom.txt
    script.sh
    cela donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ ./script.sh 
    fichier1:nom_n°5_taille1_nom.txt
    fichier2:nom_n°5_taille1_nom_est.txt
    taille:1
    fichier1:nom_n°5_taille2_nom.txt
    fichier2:nom_n°5_taille2_nom_est.txt
    taille:2
    fichier1:nom_n°6_taille1_nom.txt
    fichier2:nom_n°6_taille1_nom_est.txt
    taille:1
    fichier1:nom_n°6_taille2_nom.txt
    fichier2:nom_n°6_taille2_nom_est.txt
    taille:2
    Comme tu peux le constater, il n'a pas pris en compte le fichier nom_n°3_taille2_nom.txt car le fichier nom_n°3_taille2_nom_est.txt n'existe pas.
    Il ne te reste plus qu'a rajouter tes commandes mysql (en essayant d'utiliser une autre méthode pour y mettre le contenu des fichiers car celle que tu utilises est très loin exempte de possible effet de bord)
    Cordialement.

  18. #18
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cobra85 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            if [ $(grep "taille1" <<<$fichier2) ]
                then
                taille="1"
            elif [ $(grep "taille2" <<<$fichier2) ]
                                then         
     
                           taille="2"
    T'as raison, surtout ne lis pas les réponses qu'on te donne, ça risquerait trop de t'aider
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    taille=$(echo "$fichier2" |sed -e "s/^.\{0,\}taille\(.\).\{0,\}$/\1/")

    Accessoirement, tu as tout à fait le droit de tester directement la commande grep elle-même plutôt que tester ce qu'elle affiche => if grep plutôt que if test $(grep ...). Et indenter proprement ton script serait un plus !!!

    Citation Envoyé par cobra85 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            `mysql --user=root --password=xxxx <<MySCRIPT
     
       INSERT INTO test.taille VALUES ('', '$taille', '$contenu_fichier2', '$contenu_fichier1', '');
    MySCRIPT`
                    `mysql --user=root --password=xxxx <<MySCRIPT
     
       INSERT INTO test.taille VALUES ('', '$taille', '$contenu_fichier2', '$contenu_fichier1', '');
    MySCRIPT`
    Pourquoi deux fois la même instruction ? Et pourquoi les backquottes ??? M'étonnerait pas que ça provoque ici unjoli message d'erreur...
    Et t'es obligé d'être root pour insérer des données dans une table ? Déjà moi première chose que je fais quand j'installe un serveur mysql: je crée un compte "mysql" avec privilèges puis je vire le compte "root". Et première chose que je fais quand je crée une base: j'y crée aussi un user dédié qui aura possibilité de select/insert/update/delete pour ne pas avoir à passer par le compte admin. Surtout si en plus je mets son mot de passe dans un script...

    Citation Envoyé par disedorgue Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/sh
     
    for i in nom_n°[0-9]*_taille[0-9]*_nom.txt
    do
    	j=${i%.txt}_est.txt
    Joli - Ne récupérer que les fichiers du premier type et créer le nom du second type à partir du premier
    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]

Discussions similaires

  1. Obtenir le nom du fichier le plus récent dans un dossier.
    Par agentchico dans le forum Windows
    Réponses: 1
    Dernier message: 06/06/2008, 08h10
  2. lire le nom des fichiers qui se trouvent dans un dossier
    Par foufoulol dans le forum Langage
    Réponses: 6
    Dernier message: 05/05/2008, 11h38
  3. Noms de Fichiers d'un répertoire dans un Tableau
    Par PiliSql dans le forum VB.NET
    Réponses: 2
    Dernier message: 01/03/2008, 12h37
  4. ouvrir fichier un word contenu dans une base access
    Par seiya18 dans le forum VBA Access
    Réponses: 10
    Dernier message: 12/02/2008, 13h57
  5. Réponses: 4
    Dernier message: 04/12/2007, 13h31

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