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 :

Message d'erreur sur un Find à partir d'une variable


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Par défaut Message d'erreur sur un Find à partir d'une variable
    Bonjour,
    Dans un script qui aurait pour but de chercher un fichier ou un dossier, en fonction d'une liste, j'utilise cette ligne de code :

    eff est la variable contenant le terme à rechercher, dans l'exemple ci dessus, elle contient "Wx Wz" qui correspond bien à un dossier présent

    j'ai ce type de message:
    "find: paths must precede expression: `Wz' "
    Si je renomme mon dossier "WxWz" et si je change la variable eff ainsi "WxWz", là pas de problème, j'ai ma réponse "./%Germain/FAIT/WxWz"

    lorsque mon dossier est nommé "Wx Wz" et si je met des quotes dans ma variable eff ainsi: 'Wx Wz', j'ai à nouveau le message "find: paths must precede expression: `Wz''"

    Je vois bien que c'est un problème de syntaxe, mais je ne vois pas comment le résoudre en voulant garder la possibilité d'avoir des espaces dans les noms de mes dossiers ou fichiers

    Si quelqu'un à une solution ou une piste, merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Par défaut
    Citation Envoyé par EviLSorG Voir le message
    Dans un script qui aurait pour but de chercher un fichier ou un dossier, en fonction d'une liste, j'utilise cette ligne de code :

    eff est la variable contenant le terme à rechercher, dans l'exemple ci dessus, elle contient "Wx Wz" qui correspond bien à un dossier présent
    Je ne connais pas la syntaxe `<eff`, mais, si "eff" est une variable, pourquoi ne pas faire find -name "${eff}" ?

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    ` introduit une substitution de commandes.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Je ne connais pas la syntaxe `<eff`, mais, si "eff" est une variable, pourquoi ne pas faire find -name "${eff}" ?
    J'ai essayé ta solution, je n'ai aucun résultat (ni message d'erreur).

    Le symbole > permet d'envoyer un résultat dans un fichier ou une variable.
    par exemple te permet d'enregistrer le contenu de ton dossier dans un fichier .txt.

    A l'inverse le symbole < de permet d'extraire le contenu.

    Enfin, c'est la vision que j'en ai .

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    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 347
    Par défaut
    Tu adaptes ce que t'a suggérer jack-ft et ça fonctionnera:
    Mais tu es mal parti si tu penses que -name prend une liste...

    Dans ton fichier eff, tu ne dois avoir qu'un et un seul dossier ou fichier à rechercher.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    ah, oui ! je n'avais pas vu le <. et je n'imaginais pas que cela fonctionne avec cette syntaxe ancienne.
    c'est la même chose que $(<fichier).

    mais il faudrait définir précisément si eff est un fichier ou un variable !
    donc, montrer plus de code.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ` introduit une substitution de commandes.
    Oui, je sais.
    Je n'ai pas l'habitude d'utiliser `<, mais, du coup, j'imagine que find -name `<eff` est équivalent à find -name $(cat eff) (à un uuoc près).
    J'en déduis au passage que "eff" n'est pas une variable mais un fichier...
    et j'approuve la réponse de Disedorgue que l'on peut aussi écrire find -name "$(< eff)" si on préfère la nouvelle syntaxe...
    [EDIT] un peu grillé...

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Oui, je sais.
    ça m'a surpris, bien sûr.

    J'en déduis au passage que "eff" n'est pas une variable mais un fichier...
    c'est peut-être les deux !
    une variable qui "pointe" vers un fichier.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Tu adaptes ce que t'a suggérer jack-ft et ça fonctionnera:
    Mais tu es mal parti si tu penses que -name prend une liste...

    Dans ton fichier eff, tu ne dois avoir qu'un et un seul dossier ou fichier à rechercher.
    MERCI ! ça marche impeccable comme ça

    Oui, je suis bien conscient que eff n'est qu'un seul fichier ou dossier. Je ne l'ai pas mentionné plus haut, mais eff est une extraction d'une ligne provenant d'une liste. Mais cela ne me semblait pas pertinent de le mentionné

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    avec un exposé partiel, tu auras une réponse partielle, et potentiellement erronée.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    avec un exposé partiel, tu auras une réponse partielle, et potentiellement erronée.
    Excuse moi de ne pas avoir été exhaustif, je pensais aller au plus simple pour ne pas encombrer le sujet.
    Pour ma défense, je débute un peu dans les scripts et commandes linux .
    Mais bon grâce à vos réponses, j'ai réussi le petit exercice que je m'étais fixé: archiver dans un fichier texte, le contenu de 2 dossiers, pour ensuite effacer le contenu de ces 2 dossiers.
    juste pour le fun (car je sais que beaucoup vont trouver à redire à mon script) voici ce que j'ai pondu:

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    #!/bin/bash
    # Indique au système que l'argument qui suit est le programme utilisé pour exécuter ce fichier
    # En règle générale, les "#" servent à mettre en commentaire le texte qui suit comme ici
     
    # se placer dans le répertoire '01 - JG'
    cd /.
    cd media/dijube/'Mini SD Lenovo1'/'01 - JG'
     
    # Datation de l'archivage
    date >> archive.txt
    echo " " >> archive.txt # Ajoute une séparation
     
    # Création du log
    echo "dossier Germain" > log
    date >> log
    echo " " >> log # Ajoute une séparation
     
    # sauvegarde dossier Germain
    ls %Germain/FAIT > archG.txt
    cat archG.txt >> archive.txt
     
          # nombre de fichiers à effacer
                   N_FichG=`grep -c ^[0-Z] archG.txt`  # -c compte les lignes contenant au minimum un caractére allant de 0 à Z (chiffre, minuscule, majuscule)
                   echo " " >> archG.txt # Ajoute une séparation
                   echo "Nombre de fichiers à supprimer" >> archG.txt
                   echo $N_FichG >> archG.txt
     
     
     
          # boucle de cécompte
            while test $N_FichG != 0        #tant que $N_FichG diférent de 0, on boucle
            do
     
            sed -n $N_FichG'p' archG.txt > eff #Extrait la ligne corespondant au n° de N_FichG
     
            echo "delete" >> log    
            echo $N_FichG >> log  
            cat eff >> log
            echo " " >> log # Ajoute une séparation  
            rm -rf ./%Germain/FAIT/"`<eff`" #efface le fichier ou dossier designé par eff
     
            let "N_FichG = N_FichG - 1" # let est necessaire pour les opérations arithmétiques 
     
         done  
     
    # log fin supression FAIT%germain
    echo "Germain fait" >> log
    date >> log
    echo " " >> log
     
    # sauvegarde dossier Jeanne
    ls %Jeanne/FAIT > archJ.txt
    cat archJ.txt >> archive.txt
     
    #Ajout log Jeanne
    # Création du log
    echo "dossier Jeanne" >> log
    date >> log
    echo " " >> log # Ajoute une séparation
     
     # nombre de fichiers à effacer
                   N_FichJ=`grep -c ^[0-Z] archJ.txt`  # -c compte les lignes contenant au minimum un caractére allant de 0 à Z (chiffre, minuscule, majuscule)
                   echo " " >> archJ.txt # Ajoute une séparation
                   echo "Nombre de fichiers à supprimer" >> archJ.txt
                   echo $N_FichJ >> archJ.txt
     
     
     
          # boucle de cécompte
            while test $N_FichJ != 0        #tant que $N_FichJ diférent de 0, on boucle
            do
     
            sed -n $N_FichJ'p' archJ.txt > eff #Extrait la ligne corespondant au n° de N_FichG
     
            echo "delete" >> log    
            echo $N_FichJ >> log  
            cat eff >> log
            echo " " >> log # Ajoute une séparation 
            rm -rf ./%Jeanne/FAIT/"`<eff`"
     
            let "N_FichJ = N_FichJ - 1" # let est necessaire pour les opérations arithmétiques 
     
         done  
     
    # log fin supression FAIT%germain
    echo "Jeanne fait" >> log
    date >> log
     
     
    echo " " >> archive.txt # Ajoute une séparation
     
    # nettoyage
    rm archG.txt
    rm archJ.txt
    rm eff
     
    exit 0
    enfin bref ce petit exercice m'a bien amusé, et m'a permis d'avancer.
    Encore merci pour tous ceux qui ont répondu à mon post

  12. #12
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    quelques remarques :
    c'est quoi %Germain ?
    ON N'UTILISE PAS ls DANS UN SCRIPT !!! (voir mes précédents messages contenant cette remarque)
    quand une partie de code se répète à l'identique on utilise une fonction pour, entre autre, éviter les erreurs de recopie
    pour répéter une partie de code pour plusieurs entités, on utilise une boucle foron peut tester qu'un fichier existe et n'est pas vide (cf. help test)
    comment on lit un fichier en shell

    j'en oublie sûrement...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    quelques remarques :
    c'est quoi %Germain ?
    ON N'UTILISE PAS ls DANS UN SCRIPT !!! (voir mes précédents messages contenant cette remarque)
    quand une partie de code se répète à l'identique on utilise une fonction pour, entre autre, éviter les erreurs de recopie
    pour répéter une partie de code pour plusieurs entités, on utilise une boucle foron peut tester qu'un fichier existe et n'est pas vide (cf. help test)
    comment on lit un fichier en shell

    j'en oublie sûrement...
    Merci pour ta réponse pleine de bon sens.....
    Bisou

  14. #14
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    ça ne répond pas à ma question : c'est quoi %Germain ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  15. #15
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 117
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 117
    Par défaut
    Yop !
    Citation Envoyé par N_BaH Voir le message
    ça ne répond pas à ma question : c'est quoi %Germain ?
    Un bête dossier, on dirait :

    Citation Envoyé par EviLSorG Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # Création du log
    echo "dossier Germain" > log
    date >> log
    echo " " >> log # Ajoute une séparation
     
    # sauvegarde dossier Germain
    ls %Germain/FAIT > archG.txt
    cat archG.txt >> archive.txt

  16. #16
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    alors pourquoi cela n'est-il pas mentionné ainsi dans le log ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ça ne répond pas à ma question : c'est quoi %Germain ?
    un dossier

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

Discussions similaires

  1. Message d'Erreur sur Outlook?
    Par mnina dans le forum Outlook
    Réponses: 6
    Dernier message: 13/04/2006, 10h22
  2. [Servlet] message d'erreur sur un OutputStream
    Par jehlg dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 05/04/2006, 17h03
  3. message d'erreur sur test module
    Par Daniel MOREAU dans le forum Access
    Réponses: 5
    Dernier message: 23/11/2005, 20h19
  4. message d'erreurs sur copie de fichier
    Par screeminelle dans le forum C++
    Réponses: 9
    Dernier message: 01/11/2005, 14h21
  5. [CR10] Pquoi absence du message d'erreur sur les Nulls ?
    Par speed034 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 30/11/2004, 15h30

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