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 :

[redHat] `find -exec' dans un script retourne erreur


Sujet :

Shell et commandes GNU

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut [redHat] `find -exec' dans un script retourne erreur
    Bonjour les experts,

    Je souhaite exécuter une commande find dans mon script shell mais malheureusement ça me retourne une erreur malgré que la ligne de commande marche très bien et fait le nécessaire en ligne de commande, je sais très bien que c'est un problème de cotes et de caractères spéciaux mais je n'arrive pas à voir exactement d'où vient l'anomalie. La ligne de commande est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -iname "*.lst" -exec rename .lst .csv {} \;
    Merci par avance pour vos suggestions si vous arrivez à voir qu'est ce qui empêche le bon fonctionnement de ligne dans le script shell.

  2. #2
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    J'ai trouvé une petite solution mais lors de l’exécution le script me rajoute bizarrement un point d’interrogation (?) à la fin de l'extension du fichier. vous aurez une idée d'ou vient il ce (?) et comment l’éviter svp?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -name "*.lst" | xargs rename .lst .csv

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Bonjour,

    ça me retourne une erreur
    soit, mais laquelle ?!

    mais, a priori, la syntaxe utilisée pour rename n'est pas la bonne, et devrait même ne pas fonctionner en ligne de commande.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find  -iname "*.lst" -exec rename 's/.lst$/.csv/' {} \;
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    Bonjour N_BaH,

    Merci pour ta réaction mais ton code ne marche pas malheureusement pour moi. La distribution que j'ai est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Distributor ID: RedHatEnterpriseServerDescription:    Red Hat Enterprise Linux Server release 5.8 (Tikanga)
    Release:        5.8
    Codename:       Tikanga
    Le code qui marche parfaitement en ligne de commande est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find  -name "*.lst" -exec rename .lst .csv {} \;
    Par contre le code suivant marche dans un script shell mais me rajoute un point d'interrogation la fin de de l'extension que je n'ai aucune idée d'où il sort. D'où j'ai des noms de fichier de type MonNomDeFichier.csv?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -name "*.lst" | xargs rename .lst .csv
    Mon intention est de renommer les fichiers .lst en fichier .csv.


    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    soit, mais laquelle ?!

    mais, a priori, la syntaxe utilisée pour rename n'est pas la bonne, et devrait même ne pas fonctionner en ligne de commande.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find  -iname "*.lst" -exec rename 's/.lst$/.csv/' {} \;

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Le code qui marche parfaitement en ligne de commande est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find  -name "*.lst" -exec rename .lst .csv {} \;
    sans doute une particularité de RedHat (distribution à laquelle je n'ai pas accès).

    cependant, tu dis que dans un script, cette commande retourne une erreur.
    est-ce que tu peux nous communiquer ce message d'erreur : on ne peut pas avancer sans ce message.

    à tout hasard, ajoute un set -x dans le script avant la commande pour qu'on voit ce qui se passe.
    et montre-nous aussi ce qu'affiche la commande ls -b sur les fichiers .lst.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    Si je tape :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -iname "*.lst" -exec rename .lst .csv {} \;
    J'aurai l'erreur :
    Erreur : find: Paramètre manquant pour " -exec "
    Par contre les autres lignes ne me retournent pas d'erreurs particulières.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    Citation Envoyé par N_BaH
    à tout hasard, ajoute un set -x dans le script avant la commande pour qu'on voit ce qui se passe.
    et montre-nous aussi ce qu'affiche la commande ls -b sur les fichiers .lst.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    En exécutant mon script j'ai ce qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ls -b *.lst
     
     
    export_T602_20150419.lst  export_T605_20150419.lst
    export_T602_20150420.lst  export_T605_20150420.lst
    Et pour l'erreur concernant la ligne de commande

    invalid optionh: line 28: set: -
    set: usage: set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
    find: Paramètre manquant pour " -exec "

  9. #9
    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,

    voilà de quoi rester dubitatif.

    Est-ce que la commande suivante donne de meilleurs résultats ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find  -name "*.lst" -exec 'rename .lst .csv {} \;'
    La syntaxe de rename n'est pas la même selon les systèmes.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Bonjour,

    Peut-être que cela fonctionnerait mieux en retirant les CTRL-M de ton script... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ touch "foo^M"
    $ ls foo*
    foo?
    Le "^M" est obtenu via les touches Ctrl+v puis Ctrl+m
    Cordialement.

  11. #11
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    Merci Flodelarab pour ta réaction mais c'est déjà testé et ça ne donne aucune valeur ajoutée les cotes au script.


    Citation Envoyé par Flodelarab Voir le message
    Bonjour,

    voilà de quoi rester dubitatif.

    Est-ce que la commande suivante donne de meilleurs résultats ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find  -name "*.lst" -exec 'rename .lst .csv {} \;'
    La syntaxe de rename n'est pas la même selon les systèmes.
    Bonjour disedorgue,

    Le rajout le ta proposition engendre des problèmes car logiquement je n'ai ni Ctrl+v ni Ctrl+m dans mon code, le ^M est rajouté à la l’extension des fichiers renommés bizarrement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foo^M?
    : command not foundine 46: foo?

    Citation Envoyé par disedorgue Voir le message
    Bonjour,

    Peut-être que cela fonctionnerait mieux en retirant les CTRL-M de ton script... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ touch "foo^M"
    $ ls foo*
    foo?
    Le "^M" est obtenu via les touches Ctrl+v puis Ctrl+m

  12. #12
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Je ne comprend pas que ma solution te génère des erreurs puisque tu n'as pas de Ctrl-M dans ton fichier, tu ne peux pas les retirer, donc tu ne fais aucune modifications et donc ton script devrait avoir strictement le même problème qu'avant ta non modification...

    Le Ctrl-M doit être présent dans ta version avec xargs.

    Peux-tu nous envoyer le résultat de la commande suivante:
    Cordialement.

  13. #13
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut
    Résultat :

    file Export_Data.sh
    Export_Data.sh: ASCII text, with CRLF line terminators

  14. #14
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Hmmm...
    Il y a bien des Ctrl-M dans ton fichier Export_Data.sh, comme le précise Export_Data.sh: ASCII text, with CRLF line terminators
    Cordialement.

  15. #15
    Débutant
    Profil pro
    Inscrit en
    Août 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 62
    Points : 43
    Points
    43
    Par défaut Résolution dos2unix sur mon fichier .sh
    T'as complètement raison disedorgue.

    La magique commande dos2unix a bien résolu mon problème. T'es vraiment le meilleur chef

    Encore une fois merci à vous tous.

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

Discussions similaires

  1. Commande "exec" dans un script TCL
    Par majemoi dans le forum Tcl/Tk
    Réponses: 2
    Dernier message: 18/08/2011, 20h49
  2. [AC-2003] une expression valide dans une requete retourne #Erreur
    Par mamadouabd dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/10/2009, 19h46
  3. erreur dans mon script
    Par Swata dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2005, 00h02
  4. [langage]erreur dans mon script
    Par Fabouney dans le forum Langage
    Réponses: 11
    Dernier message: 30/06/2005, 14h58
  5. [Apache] Erreur dans mes scripts CGI
    Par GLDavid dans le forum Apache
    Réponses: 2
    Dernier message: 28/08/2004, 06h14

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